`
lyy3323
  • 浏览: 85873 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA 值传递还是引用传递

阅读更多
java值传递与引用传递(1)——一语中的篇2009-02-10 14:39public static void add(StringBuffer x,StringBuffer y){
        x.append(y);
        y=x;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        StringBuffer a=new StringBuffer("A");
        StringBuffer b=new StringBuffer("B");
        add(a,b);
        System.out.println(a+","+b);
    }

输出结果:AB,B

    不管你传的是什么,传过去的都只是一个副本而已,这个副本作为方法的局部变量保存在栈中。
    如果传的是基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。
    如果传的是一个对象的引用,也是一样的,也是一个副本,但是这个副本和作为参数传进来的那个引用指向的是内存中的同一个对象,所以你通过这个副本也可以操作那个对象。但是如果你修改这个引用本身,比如让他指向内存中的另外一个对象,原来作为参数传进来的那个引用不会受到影响。
    我觉得弄明白这些就行了,说值传递或引用传递都无所谓,但是说值传递更适合一些,这个值可以是引用也可以是基本数据类型。

0
0
分享到:
评论
5 楼 yekui 2012-09-07  

假设integer 地址值为0001h ---->对应值为10  , Integer i的时候,应该是从新开辟空间地址值为0002h ,并将值拷贝一份给0002h  所以,i=100,改变的仅仅是0002h地址的值,0001h也就是integer的值,并未改变。


那我要发问了,到底什么时候传值?什么时候传引用地址?


基本数据类型传值?引用数据类型传引用地址?如果是这样那么以上解答无法成立。




4 楼 yekui 2012-09-07  
lyy3323 写道
yekui 写道
弱弱的请教一下

Integer 是引用数据类型

Integer integer = new Integer(10);
       changeInteger(integer);

public static void changeInteger(Integer i)
{
i = 100;
}


为什么integer 不是100?
传入是值还是引用?




应该还是10呀。因为传入的只是副本引用值,改变的只有副本值的数据。原来integer 并没有改变。



假设integer 地址值为0001h ---->对应值为10  , Integer i的时候,应该是从新开辟空间地址值为0002h ,并将值拷贝一份给0002h  所以,i=100,改变的仅仅是0002h地址的值,0001h也就是integer的值,并未改变。
3 楼 lyy3323 2012-09-04  
yekui 写道
弱弱的请教一下

Integer 是引用数据类型

Integer integer = new Integer(10);
       changeInteger(integer);

public static void changeInteger(Integer i)
{
i = 100;
}


为什么integer 不是100?
传入是值还是引用?




应该还是10呀。因为传入的只是副本引用值,改变的只有副本值的数据。原来integer 并没有改变。
2 楼 yekui 2012-08-28  
弱弱的请教一下

Integer 是引用数据类型

Integer integer = new Integer(10);
       changeInteger(integer);

public static void changeInteger(Integer i)
{
i = 100;
}


为什么integer 不是100?
传入是值还是引用?
1 楼 兰博基尼 2010-09-15  
说的太对了!学习了

相关推荐

Global site tag (gtag.js) - Google Analytics