黑马程序员技术交流社区

标题: 崩溃了。怎么看也没想明白 [打印本页]

作者: 杨佳名    时间: 2014-9-24 14:54
标题: 崩溃了。怎么看也没想明白
本帖最后由 杨佳名 于 2014-9-24 15:37 编辑
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.                 {
  5.                         Method.mothed1();
  6.                 }
  7.         
  8. }

  9. class Method
  10. {
  11.         static void mothed1()
  12.         {
  13.                 int x=0;
  14.                 int y=1;
  15.                 switchValue(x,y);
  16.                 System.out.println("x="+x);
  17.                 System.out.println("y="+y);
  18.         }
  19.         static void switchValue(int x,int y)
  20.         {
  21.                 int t=x;
  22.                 x=y;
  23.                 y=t;
  24.         }        
  25. }
复制代码
大神帮我看一下,打印结果应该是什么。我一直没想明白

作者: liaorubei    时间: 2014-9-24 15:21
:lol你的想法是对啊,你也没有想错,只不过你掉进了JAVA的坑里面去了.
JAVA中数据的类型按数据在内存的储存方法可以分成二大类,
一种是基本数据类型,保存在栈内存,变量直接保存的就是值,基本数据类型在传递的时候,传递的是值的副本
而int就是基本数据类型中的一种.
如在switchValue(x, y);方法的时候,会传递xy的值的副本另一个0,和一个1进来,并不是xy的本身,所以在
switchValue()方法中无论你怎么操作,都不会影响到mothed1()方法的xy值,所以在mothed1()打印的结果是原来的结果,但是在switchValue()方法中的xy的值则是已经更换过了的.所以错的不是你,是别人坑了你.

一种是引用数据类型,保存在堆内存,变量保存的只是引用,
对于引用类型,我说先不说了,就是和你原先想的是一样的,个人建议你还是好好加大马力看视频好了,看到后面老师就会说到这个问题的,看视频不要一下子就钻牛角尖,慢慢来.有看不懂的地方略过.
就像看书一样,粗看,精看,跳着看:lol
我代表程序员界欢迎你的到来.
作者: fantacyleo    时间: 2014-9-24 15:25
楼上正解。认真看视频,好好体会“Java中方法参数传递是值传递”这句话
作者: 杨佳名    时间: 2014-9-24 15:30
liaorubei 发表于 2014-9-24 15:21
你的想法是对啊,你也没有想错,只不过你掉进了JAVA的坑里面去了.
JAVA中数据的类型按数据在内存的储存方 ...

嗯嗯!现在还是打基础中,好多理解的都没有这么深,谢谢指导。
作者: 杨佳名    时间: 2014-9-24 15:33
fantacyleo 发表于 2014-9-24 15:25
楼上正解。认真看视频,好好体会“Java中方法参数传递是值传递”这句话

嗯。待会我去好好总结一下,记下笔记。谢谢。
作者: wyxc    时间: 2014-9-24 15:48
学习了,楼上正解!
作者: 零点12    时间: 2014-9-24 15:55
学习了。。。谢谢楼主,谢谢回答问题的大神哥哥们
作者: jtshawn    时间: 2014-9-24 17:17
额。lz你的switch方法和两条打印语句没有关系。把两条打印语句放到switch方法中就好了。
作者: 杨佳名    时间: 2014-9-24 17:44
jtshawn 发表于 2014-9-24 17:17
额。lz你的switch方法和两条打印语句没有关系。把两条打印语句放到switch方法中就好了。 ...

嗯。弄明白了
作者: 18643448863    时间: 2014-9-24 19:16
两个里面的X,y 不是一个X,Y      这个没有具体的返回值类型 你置换后貌似也返回不会去  你 static void mothed1() 打印的 还是本函数中的 X,Y  把 输出语句 改到 static void switchValue(int x,int y) 这个里就Ok了  不知道 我说的可对 呵呵
作者: 奋发吧小白    时间: 2014-9-24 20:06
liaorubei 发表于 2014-9-24 15:21
你的想法是对啊,你也没有想错,只不过你掉进了JAVA的坑里面去了.
JAVA中数据的类型按数据在内存的储存方 ...

正解啊 !




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