java:pass

我有两个代码片段:

第一

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
如何和为什么?


Java始终是按值传递的。

然而,在第二种情况下,您是通过值传递引用(数组是对象,并且Java对象始终通过引用进行访问)。 因为该方法现在具有对数组的引用,所以可以自由修改它。


Java是通过价值传递 - 永远。

这里有一个引用James Gosling的话,他应该对任何人都有足够的权威性:

来自Java的作者:“Java中只有一个参数传递模式 - 按值传递 - 这有助于简化事情。” Java编程语言,第二版。 由Ken Arnold和James Gosling撰写,第40页第2.6.1节第3段。

链接地址: http://www.djcxy.com/p/20651.html

上一篇: java: pass

下一篇: Ionic: Routing gives a blank page