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

  • 相关阅读:
    [ 测试管理 ] 如何描述缺陷报告?
    [ 测试思维 ] 启发式测试策略模型(HTSM)
    Linux tcpdump命令使用方法
    Linux创建SSH信任关系
    [ Shell入门教程 ] 通配符与基础正则表达式、扩展正则表达式
    [ Shell入门教程 ] shell字符串基本操作
    Shell多进程获取未使用IP方法
    [ Shell入门教程 ] 字符串空格和文件空行删除
    [ Shell入门教程 ] Shell编程中数值计算方法实例
    [ Shell入门教程 ] echo和printf使用实例
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4771244.html
Copyright © 2011-2022 走看看