-1

我对 InputStream 类的一种方法有疑问,因为在我看来它永远不会起作用。

让我们有这样的东西:

InputStream is;
byte[] b = new byte[64];

is.read(b);
// and now the byte array b contains data comming through InputStream???

.read()如果该方法的使用看起来像这样,我会理解:

b = is.read();

因为读取方法将返回字节数组。

但是真正的方法如何在它的参数中写入一些东西并使其在自身之外可见呢?

就像我会有这个:

String myString = "myText";

public void myMethod(String s) {
  s = "abc123";
}

myMethod(myString);
// and now is the content of myString equal to "abc123" instead of "myText" ???
// ANSWER: no!

感谢您的回复。

4

5 回答 5

2

除了原始类型之外的所有东西都是java中的对象(包括数组)。对象通过引用的副本从一种方法传递到另一种方法。因此,如果被调用的方法对传递给它的对象进行更改,则方法最终会更改传递给它的同一个对象。因此,更改也会反映到调用方法。

您需要了解对象以及它们如何在方法调用之间传递以详细了解这一点。请参考此链接以获得更好的理解。

于 2013-07-20T12:50:15.733 回答
2

因为读取方法将返回字节数组。

诶?你在哪里读到的?InputStream.read()方法返回一个整数

真正的方法如何在其参数中写入一些内容并使其在自身之外可见?

.read(byte[])因为您传入了对将写入的数组的引用。该方法的返回值是实际写入作为参数传递的字节数组的字节数。

此代码有效:

public void writeOneToFirstElement(final int[] array)
{
    array[0] = 1;
}

final int[] foo = { 0 };
writeOneToFirstElement(foo);
System.out.println(foo[0]); // prints 1
于 2013-07-20T13:00:50.630 回答
0

数组只是对对象的引用,导致数据所在的地址不会因修改而改变,它可以以这种方式工作在这里解释: http ://www.javaworld.com/javaqa/2000-05/03-qa-0526 -pass.html
编辑:错字

于 2013-07-20T12:50:34.483 回答
0

byte array以及String引用类型..当您将它们作为参数传递时,引用被复制并且它们都引用同一个对象..


例如,aremote就像对 a 的引用TV。当您将遥控器传递给另一个人时,他仍然能够访问TV

于 2013-07-20T12:50:35.227 回答
0

对象通过引用的副本从一种方法传递到另一种方法。因此,如果被调用的方法对传递给它的对象进行更改,则方法最终会更改传递给它的同一个对象。因此,更改也会反映到调用方法。例如String,将参数中的替换为String[]并检查输出。

public static void main(String[] args) 
{
 String[] myString =  {"myText"};
 myMethod(myString);
 System.out.println(myString[0]);
}

public void myMethod(String[] s) {
  s[0] = "abc123";
}
于 2013-07-20T12:59:18.283 回答