zoukankan      html  css  js  c++  java
  • 对java只有按值传递的理解

    1。首先要理解对象与对象引用:

      在新建一个对象时   Person p = new Person();

    • 其中Person是类(即创建对象的模板);
    • 右边  new Person()  新建了一个对象,放在了堆内存内;
    • 左边  Person p 新建了一个Person类型的引用 p;
    • = 令 引用 p 指向新创建出来的对象;

      此时可以通过引用 p 调用或修改对象里的内容。

    2。进行传值时:

      第一种情况,基本类型(如int,double,long 等),看下面例子。

      int i=1;

      int j=i;

      i=2;

      System.out.println(i);

      System.out.println(j);

      此时的输出 为 2 和 1 , 令 j = i 后 ,i 改变了其值,但是 j 还是为 1

      说明int j = i; 仅仅只是将 i 的值传给了 j ,所以 i 改变了其值,j 不会做改变。

      

      第二种情况,对象的传值操作,依旧看个例子。

      

    package testWeb;
    
    public class Person {
        public  String str1 = "a";
        public  String str2 = "b";
        
        public void changeValue(Person p){
            p.str1 = "c";
            p.str2 = "d";
        }
        
        public void changeObject(Person p){
            p =new Person();
            p.str1 = "c";
            p.str2 = "d";
        }
        
        public static void main(String[] args) {
             Person p1 = new Person();
             p1.changeValue(p1);  //调用该方法将引用 p1 的【复制引用】传递给changeValue方法,方法内通过引用更改了对象的属性。  注意传递的时引用的复制
             System.out.println(p1.str1);// 所以这里输出 c
             System.out.println(p1.str2); // 这里输出 d
    
             Person p2 = new Person();
             p2.changeObject(p2);//这里也时传的引用的复制,所以  复制的引用 重新 new Person()指向了新的对象, 此时changeObject()方法了 通过复制的引用修改的就是新的对象的属性, p2引用所指向对象属性内容没有变更。
             System.out.println(p2.str1);//所以这里输出 a
             System.out.println(p2.str2);//这里输出 b
        }
    }

    看到这儿,看着对象这不是传递引用吗, 怎么说是按照值传递 。

    这就要理解 "按引用传递" 与 "传递的是引用" 的差别,  传递的实际是对象的引用的值。 接收方会根据这个值,再生成一个对该对象的引用。 所以此时这两个引用是两个独立的引用。 

    而传递引用的意思是接收方与传递方 是同一个引用。在C++中有这种现象。java中则不存在。

      

     

      

  • 相关阅读:
    Python PEP—Python增强提案
    容器技术介绍:Docker简介及安装
    Python笔记:List相关操作
    Python笔记:字符串操作
    Python笔记:属性值设置和判断变量是否存在
    mitmproxy 代理工具介绍:rewrite和map local实现
    接口测试代理工具charles mock测试
    接口测试框架Requests
    JMeter性能测试:JMeter安装及脚本录制回放
    PHP Parse error: parse error, unexpected T_OBJECT_OPERATOR
  • 原文地址:https://www.cnblogs.com/heiniao/p/6528333.html
Copyright © 2011-2022 走看看