黑马程序员技术交流社区

标题: 在这卡住了。。。求分析 [打印本页]

作者: nerveva2000    时间: 2014-10-31 06:47
标题: 在这卡住了。。。求分析
本帖最后由 nerveva2000 于 2014-11-2 11:11 编辑

基本数据类型参数传递


  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {

  5. int x = 3;
  6. show(x);
  7. System.out.println("x="+x);        //x=3;
  8. }
  9. public static void show(int x)
  10. {
  11. x = 4;
  12. }
  13. }
复制代码

引用数据类型参数传递
  1. class Demo
  2. {
  3. int x = 3;
  4. public static void main(String[] args)
  5. {
  6. Demo d = new Demo();
  7. d.x = 9;
  8. show(d);
  9. System.out.println(d.x);        //d.x=4;
  10. }
  11. public static void show(Demo d)
  12. {
  13. d.x = 4;
  14. }
  15. }
复制代码




作者: 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()方法时都想成这样-
我当时就这样理解的,感觉蛮顺利的。

其实就是
1、前边那个是把一个局部变量x赋值给另一个局部变量x,两者没有任何关系,当然其中一个值改变,另一个不会受影响。
2、后边那个是把一个堆内存中的一个对象赋值给两个局部变量d,无论修改哪个d,都会改变引用变量d指向的对象。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2