美文网首页
java中的引用传递

java中的引用传递

作者: 香芋牛奶面包 | 来源:发表于2017-02-17 15:02 被阅读37次

    首先,java中只有值传递吗?

    其实有些人认为有,有些人认为没有,各有各的道理
    怎么理解呢?

    java中传递对象做为参数时,实际上传递的只是这个对象引用的一个拷贝,读起来可能有点难以理解,这里看个例子:

    public class Example {
    
        String account = "hello";
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Example e = new Example();
            e.change(e);
            System.out.print(e.account);
            
        }
        
        void change(Example e){
            e.account="hello1";
        }
    }
    

    这里的输出是hello1,和我们所预期的一样,可能这里我们会觉得这不就是引用传递吗!!其实这里传递的只是Example对象引用的一个拷贝,听名字,只是个拷贝,自然与原引用不相干了。只是这两个引用指向的内容一样,所以我们改变内容的时候,原对象的内容也跟着变了!

    再看一个例子:

    public class Example {
    
        String account = "hello";
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Example e = new Example();
            e.change(e.account);
            System.out.print(e.account);
            
        }
        
        void change(String a){
            a="hello1";
        }
    }
    

    这里输出是hello ,可以发现,这次account值没有被改变了,为什么呢?

    其实这里传递的也是对象引用的拷贝,只是这里传递的是个 String对象:account对象引用的拷贝 a,可以看到,在change方法中 a 指向了“hello1”,这时候相当于a 和account 这两个引用分别指向了不同的内容,这时候a引用所指向的内容变了,自然跟account所指向的内容没有任何关系了!

    最后总结一下,为什么当传递对象做为参数时,这么像是引用传递!

    这是因为传递的是引用的拷贝,如果你不将这个 冒牌货 指向一个新的内容(对象),那么他指向的对象还是原来那个呀!那当你去操作这个引用所指的对象其实还是在操作原有的内容。

    相关文章

      网友评论

          本文标题:java中的引用传递

          本文链接:https://www.haomeiwen.com/subject/xgxlwttx.html