当前位置: 代码迷 >> J2EE >> java中的传值和传址,小弟我可不可以说new出来的就是传址,不是new的就是传值呢
  详细解决方案

java中的传值和传址,小弟我可不可以说new出来的就是传址,不是new的就是传值呢

热度:99   发布时间:2016-04-17 23:10:52.0
java中的传值和传址,我可不可以说new出来的就是传址,不是new的就是传值呢
我感觉就是这样啊
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        byte[] buf0 = new byte[8];
        
        buf0[0] = (byte)0;
        buf0[1] = (byte)0;
        changeByteArr(buf0);
        Person person = new Person();
        person.age = 20;
        doing(person);
        Log.d("MainActivity", ""+person.age);
        changeAge(person.age);
        Log.d("MainActivity", ""+person.age);
        
        Log.d("MainActivity", ""+(int)buf0[0]);
        
    }
    public void changeAge(int age){
     age = age * 2;
    }
    
    public void doing(Person per){
     per.age = 10;
    }
    
    public void changeByteArr(byte[] byt){
     for(int i = 0;i<byt.length;i++){
     byt[i] = (byte)1;
     }
    }
    
    public class Person {

     public String name;
     public int age;
    
    }
    
}


打印的信息非别是10,10,1
------解决思路----------------------
传参的时候只要不是基本数据类型传递的都是地址,数组是一个真正的对象,所以传递的是地址,在方法内部改变数组中的值。外面的数组也会改变。你的程序中changeAge(person.age);只是把一个int传递过去了,和person没有任何关系。但是doing(person);中传递是这个person的引用,在方法体中改变person的age值,也就是person这个应用所指向的person这个实例的age属性中的值被改变了,所以在方法外person.age=10
  相关解决方案