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中则不存在。

      

     

      

  • 相关阅读:
    由ORACLE:ORA-28001: the password has expired(密码过期)引起ODI资料库连接失败
    由ODI初始化资料档案库(RUC)引起修改ORACLE字符集(ZHS16GBK-AL32UTF8)
    如何面对被抛弃的System.Data.OracleClient
    CS231n 2016 通关 第二章-KNN 作业分析
    CS231n 2016 通关 第二章-KNN
    CS231n 2016 通关 第一章-内容介绍
    加特征加正则
    ML 徒手系列说明
    caffe 入门实例2 如何写一个模型
    caffe 入门实例3 fine-turning
  • 原文地址:https://www.cnblogs.com/heiniao/p/6528333.html
Copyright © 2011-2022 走看看