java:按值传递或按引用传递

时间:2012-02-22 01:33:57

标签: java pass-by-reference pass-by-value

我有两个代码段:

第一

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中,文件的所有内容都可用 怎么样和为什么?

2 个答案:

答案 0 :(得分:9)

Java is always pass-by-value.

但是,在第二种情况下,您将传递引用by-value(数组是一个对象,并且始终通过引用访问Java对象)。因为该方法现在具有对数组的引用,所以可以自由地修改它。

答案 1 :(得分:4)

Java是按值传递的 - 总是

这是引用詹姆斯·戈斯林的reference,他应该对任何人都具有足够的权威性:

  

来自Java的作者:“有   正好一个参数传递模式   Java - 按值传递 - 这有帮助   保持简单。“Java   编程语言,第2版。肯   阿诺德和詹姆斯戈斯林,部分   2.6.1,第40页,第3段。