黑马程序员技术交流社区
标题:
在这卡住了。。。求分析
[打印本页]
作者:
nerveva2000
时间:
2014-10-31 06:47
标题:
在这卡住了。。。求分析
本帖最后由 nerveva2000 于 2014-11-2 11:11 编辑
基本数据类型参数传递
class Demo
{
public static void main(String[] args)
{
int x = 3;
show(x);
System.out.println("x="+x); //x=3;
}
public static void show(int x)
{
x = 4;
}
}
复制代码
引用数据类型参数传递
class Demo
{
int x = 3;
public static void main(String[] args)
{
Demo d = new Demo();
d.x = 9;
show(d);
System.out.println(d.x); //d.x=4;
}
public static void show(Demo d)
{
d.x = 4;
}
}
复制代码
作者:
cvnmklop
时间:
2014-10-31 07:27
x=4是局部变量 用完直接就消除了 d.x=4是指向了d对象中的x变量
作者:
wzg1015
时间:
2014-10-31 07:27
一个传递的是对象的引用,一个传递的是基础数据类型的副本。
操作对象的引用跟操作对象本身是一样的。(前提是这个引用一直指向这个对象,中途未改变。)
基础数据类型传递的都是副本,修改这个副本,对于基础数据原值毫无影响。
作者:
王世虎
时间:
2014-10-31 10:29
学习了~~~特意把代码写了一遍 跑起来看看
作者:
OnlyStyle
时间:
2014-10-31 11:17
恩,学习了。
作者:
feng_0207
时间:
2014-10-31 22:31
基础数据类型和引用数据类型是不同的。
作者:
Eagle
时间:
2014-10-31 22:37
第一个那个是没有修改到变量x的,show函数里只是把定义的局部变量赋值为4.与外面的x并没有联系。没有返回
作者:
taambernk
时间:
2014-11-2 07:03
按值传递传递的是值的拷贝,按引用传递传递的是引用的地址值
作者:
Mr.JUN
时间:
2014-11-2 12:37
画下内存图就可以了
作者:
踏云
时间:
2014-11-2 17:32
基本数据类型:传递的值数据类型的副本,不是原来的值
引用类型传递:传递的是对象的地址,但改变对象的值时,因为操作的是同一个对象,原来变量也还是引用同一个对象,通过原来变量访问对象的时候那就是访问了被更改的值了
作者:
桃华月禅
时间:
2014-11-2 18:48
本帖最后由 桃华月禅 于 2014-11-2 18:50 编辑
我感觉只要把引用show()方法时都想成这样-
public static void show(int x) //int x = x 把3赋值给x,这样就很好理解了!其实就是这个老犯糊涂,我只这样认为的
public static void show(Demo d) //Demo d = d 把上边那个变量d赋值给这个新Demo类型的变量
复制代码
我当时就这样理解的,感觉蛮顺利的。
其实就是
1、前边那个是把一个局部变量x赋值给另一个局部变量x,两者没有任何关系,当然其中一个值改变,另一个不会受影响。
2、后边那个是把一个堆内存中的一个对象赋值给两个局部变量d,无论修改哪个d,都会改变引用变量d指向的对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2