• Java引用传递之二


    1、不管JAVA参数的类型是什么,一律传递参数的副本。

    2、变量分为两类:对于基本类型变量,传值的副本;对于一切对象型变量,传引用的副本。

    3、传引用副本的实质就是复制指向地址的指针。

    4、需要注意的是,String类型也是对象型变量,所以它必然是传引用副本。只不过String是一个非可变类,使得其传值还是传引用显得没有什么区别。

    5、对基本类型而言,传值就是把自己复制一份传递,即使自己的副本变了,自己也不变;而对于对象类型而言,它传的引用副本(类似指针)指向自己的地址,而不是自己实际值的副本,而不是采用复制对象值的方法。

    6、具体例子,请看本人博客http://www.cnblogs.com/XuGuobao/p/7233137.html

    7、实例对象对类的属性的作用:

     1 class Person01{
     2     int age = 30;
     3 }
     4 
     5 public class RefDemo04 {
     6 
     7     public static void main(String[] args) {
     8         Person01 p1 = new Person01();
     9         p1.age = 20;
    10         System.out.println("p1.age = "+ p1.age);
    11         Test();
    12     }
    13     public static void Test(){
    14         Person01 p2 = new Person01();
    15         System.out.println("p2.age= " + p2.age);
    16     }
    17 }

    输出结果为:

    p1.age = 20
    p2.age= 30

    分析:当重新new对象时,所用的属性仍然时原始值。

    8、

     1 class Value{
     2     public int i = 15;
     3 }
     4 
     5 public class Test {
     6 
     7     public static void main(String[] args) {
     8         Test t = new Test();
     9         t.first();
    10     }
    11 
    12     private void first() {
    13         int i = 5;
    14         Value v = new Value();
    15         v.i = 25;
    16         second(v,i);
    17         System.out.println(v.i);
    18     }
    19 
    20     private void second(Value v, int i) {
    21         i = 0;
    22         v.i = 20;
    23         Value val = new Value();
    24         v = val;
    25         System.out.println(v.i + " " + i);
    26     }
    27 }

    输出结果为:

          15 0
          20

    分析:对象v也是传一份引用的副本,v.i = 20;通过引用的副本改变原对象的值为20,但在语句Value val = new Value();中,new了一个新对象,然后执行v = Val;相当于引用的副本指向了一个新的Object。所以v.i = 15是改变新的Object的值,而不改变原对象的值。

    9、数组的引用传递

     1 public class Test01 {
     2 
     3     public static void main(String[] args) {
     4         char ch[] = {'n','g','e','t'};
     5         chage(ch);
     6         System.out.println(ch);
     7     }
     8 
     9     private static void chage(char[] ch) {
    10         ch[0] = 'c';
    11     }
    12 }

    输出结果为:cget

    分析:数组的传值本质时传地址值的副本。

  • 相关阅读:
    python 脚本 百里守约100%瞬狙
    Vue.js框架:超出配置登出时间就会退出登陆(前端设置)
    记一次canvas叠加错位的问题(unity2017)
    找到一篇很牛的内存管理文章(转)
    lua 懒注入
    CPP和C#交互语法速览
    CPP和C#交互实践
    CPP和C#交互
    Linux配置SFTP
    pandas Dataframe merge 后出现重复行
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7234632.html
Copyright © 2020-2023  润新知