zoukankan      html  css  js  c++  java
  • java对象引用传递和值传递的一些总结

    1.对象作为函数的参数传递过去的时候,是以原对象的引用的方式传递的,更改参数对象的值,会影响原来的对象。 2.对象作为函数的返回值的时候,传递过来的也是一个引用传递,更改传递过来的对象的时候,会影响原来的对象 3.对象A给另一个对象B赋值的时候(无论B是否经过了new 开辟新空间),此时的B是对A对象的一个引用,更改B会影响A 4.唯一的不是引用传递的方式是: 使用 基本数据类型赋值的方式,来对对象进行拷贝比如上例中的最后一种方式。这样出现的对象是一个新对象,不是原始对象的引用 补充: 1. java中的String类型虽然也为一个对象,但是在赋值传递的时候,走的是值传递的路线,和一般数据类型是同样的。String为一个特例。 总结: 对象的传递过程中, 基本上都是以引用传递来进行的,唯一的非引用传递的方法是: 自己开辟新的对象空间后,使用基本数据类型赋值方法(也可以自己实现一个copy复制函数)。

    附上测试代码和结果:

     

            String str = new String("abc");
            char[] ch = {'a','b','c'};
    
            Log.d("levin", str+"
    ");    
            Log.d("levin", String.valueOf(ch));
    
            change(str,ch);
            
            System.out.print("
    ");    
            Log.d("levin", str+"
    ");    
            Log.d("levin", String.valueOf(ch));
            
            Person person  = new Person();
            person.name = "bill";
            person.age = 10;
            changePerson(person);
            Log.d("levin", person.name+"
    ");    
            Log.d("levin", String.valueOf(person.age));
        public void changePerson(Person person){
            person.name = "Jobs";
            person.age = 50;
          }

     

    06-07 12:33:57.178: D/levin(8091): abc 06-07 12:33:57.578: D/levin(8091): abc 06-07 12:33:58.548: D/levin(8091): abc 06-07 12:33:58.988: D/levin(8091): gbc 06-07 12:34:00.158: D/levin(8091): Jobs 06-07 12:34:00.418: D/levin(8091): 50

  • 相关阅读:
    centos7下安装docker
    java中获取两个时间中的每一天
    Linq中string转int的方法
    logstash 主题综合篇
    Windows环境下ELK(5.X)平台的搭建
    本地没问题 服务器 提示 Server Error in '/' Application
    错误 未能找到类型或命名空间名称"xxxxxx"的真正原因
    System.web和System.WebServer
    Chrome Adobe Flash Player 因过期而 阻止
    请求WebApi的几种方式
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4771244.html
Copyright © 2011-2022 走看看