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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 玥夜 中级黑马   /  2014-7-31 17:15  /  1202 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 玥夜 于 2014-7-31 17:59 编辑


public class tist
{
private void show(int a)
{
   a=2;//是4=2麽???将2赋值给4    此处不理解 请老师给解答一下  谢谢
  System.out.println(a);
}

public static void main(String[] args)

{
  tist t=new tist();
  int a=4;
  t.show(a);//调用show方法将a作为int行变量传入
  System.out.println("aaaaa"+a);
}
}

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

9 个回复

倒序浏览
虽然写 a = 4 ,但是 a 不是 4 ,是一个变量名,a = 2 是重新赋值,之后在这个方法内部的 a 就等于 2 了
回复 使用道具 举报
icris 发表于 2014-7-31 17:27
虽然写 a = 4 ,但是 a 不是 4 ,是一个变量名,a = 2 是重新赋值,之后在这个方法内部的 a 就等于 2 了 ...

哦  那就是跟我传的值没有关系了 在这个方法中是用不到的  是吧     在show方法中 a就等于2  对吧 :D
回复 使用道具 举报
这个问题非常经典,多谢楼主分享。

show()方法带参数,a传入的虽然是具体值4,但它依然有名字,它的名字就是a。

归根究底,其实还是变量名的问题。

比如说,int a=4;虚拟机会在栈内存中开辟一个空间,这处空间的名字是a,里面存的东西是4。后来将4拿掉,换成了2,空间还是这个空间,只不过里面的东西不一样了。

其实楼主的意思很接近了,只不过不是4=2,而是2把4赶走了

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

回复 使用道具 举报
玥夜 发表于 2014-7-31 17:32
哦  那就是跟我传的值没有关系了 在这个方法中是用不到的  是吧     在show方法中 a就等于2  对吧  ...

不是没关系,把 a = 2 去掉的话这个方法里 a 就等于 4 了。
在 a = 2 之前 a 就是 4 了,可以把打印前移一行看看
回复 使用道具 举报
你在main方法里初始化的a=4,传值到show里,shou方法里把a重新赋值,赋值的只是show(int a)这个a,因为a是基本类型变量,不是引用类型的,所以此方法里的a变成了4,外面main方法里的a原值是不变的
回复 使用道具 举报
玥夜 中级黑马 2014-7-31 17:50:20
7#
wisely 发表于 2014-7-31 17:37
这个问题非常经典,多谢楼主分享。

show()方法带参数,a传入的虽然是具体值4,但它依然有名字,它的名字就 ...

谢谢  好像是懂了  就是我在show中重新给a赋值  就是在a=2上面有一个隐式a=4 对吧
回复 使用道具 举报
玥夜 中级黑马 2014-7-31 17:52:38
8#
wisely 发表于 2014-7-31 17:37
这个问题非常经典,多谢楼主分享。

show()方法带参数,a传入的虽然是具体值4,但它依然有名字,它的名字就 ...

如果我直接传个5 进去 也是相当于有个a=5 对么 然后在a=2.。。。
回复 使用道具 举报
玥夜 中级黑马 2014-7-31 17:53:40
9#
icris 发表于 2014-7-31 17:37
不是没关系,把 a = 2 去掉的话这个方法里 a 就等于 4 了。
在 a = 2 之前 a 就是 4 了,可以把打印前移 ...

哦  知道了   谢谢
回复 使用道具 举报
Bule丶 发表于 2014-7-31 17:45
你在main方法里初始化的a=4,传值到show里,shou方法里把a重新赋值,赋值的只是show(int a)这个a,因为a是 ...

恩   谢谢  好像懂了:D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马