我有两个代码段:
第一
class PassByTest{
public static void main(String... args){
PassByTest pbt=new PassByTest();
int x=10;
System.out.println("x= "+x);
pbt.incr(x);//x is passed for increment
System.out.println("x= "+x);//x is unaffected
}
public void incr(int x){
x+=1;
}
}
在此代码中,x
的值不受影响。
第二
import java.io.*;
class PassByteTest{
public static void main(String...args) throws IOException{
FileInputStream fis=new FileInputStream(args[0]);
byte[] b=new byte[fis.available()];
fis.read(b);//how all the content is available in this byte[]?
for(int i=0;i<b.length;i++){
System.out.print((char)b[i]+"");
if(b[i]==32)
System.out.println();
}
}
}
在byte[] b
中,文件的所有内容都可用
怎么样和为什么?
答案 0 :(得分:9)
但是,在第二种情况下,您将传递引用by-value(数组是一个对象,并且始终通过引用访问Java对象)。因为该方法现在具有对数组的引用,所以可以自由地修改它。
答案 1 :(得分:4)
Java是按值传递的 - 总是。
这是引用詹姆斯·戈斯林的reference,他应该对任何人都具有足够的权威性:
来自Java的作者:“有 正好一个参数传递模式 Java - 按值传递 - 这有帮助 保持简单。“Java 编程语言,第2版。肯 阿诺德和詹姆斯戈斯林,部分 2.6.1,第40页,第3段。