A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨佳名 高级黑马   /  2014-9-24 14:54  /  1498 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨佳名 于 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. }
复制代码
大神帮我看一下,打印结果应该是什么。我一直没想明白

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

11 个回复

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

一种是引用数据类型,保存在堆内存,变量保存的只是引用,
对于引用类型,我说先不说了,就是和你原先想的是一样的,个人建议你还是好好加大马力看视频好了,看到后面老师就会说到这个问题的,看视频不要一下子就钻牛角尖,慢慢来.有看不懂的地方略过.
就像看书一样,粗看,精看,跳着看:lol
我代表程序员界欢迎你的到来.

点评

解释的很好,受教了!  发表于 2014-9-24 23:07

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
楼上正解。认真看视频,好好体会“Java中方法参数传递是值传递”这句话
回复 使用道具 举报
杨佳名 来自手机 高级黑马 2014-9-24 15:30:35
板凳
liaorubei 发表于 2014-9-24 15:21
你的想法是对啊,你也没有想错,只不过你掉进了JAVA的坑里面去了.
JAVA中数据的类型按数据在内存的储存方 ...

嗯嗯!现在还是打基础中,好多理解的都没有这么深,谢谢指导。
回复 使用道具 举报
杨佳名 来自手机 高级黑马 2014-9-24 15:33:57
报纸
fantacyleo 发表于 2014-9-24 15:25
楼上正解。认真看视频,好好体会“Java中方法参数传递是值传递”这句话

嗯。待会我去好好总结一下,记下笔记。谢谢。
回复 使用道具 举报
学习了,楼上正解!
回复 使用道具 举报
学习了。。。谢谢楼主,谢谢回答问题的大神哥哥们
回复 使用道具 举报
额。lz你的switch方法和两条打印语句没有关系。把两条打印语句放到switch方法中就好了。
回复 使用道具 举报
杨佳名 来自手机 高级黑马 2014-9-24 17:44:02
9#
jtshawn 发表于 2014-9-24 17:17
额。lz你的switch方法和两条打印语句没有关系。把两条打印语句放到switch方法中就好了。 ...

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

正解啊 !
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马