黑马程序员技术交流社区

标题: 关于赋值的问题 [打印本页]

作者: 玥夜    时间: 2014-7-31 17:15
标题: 关于赋值的问题
本帖最后由 玥夜 于 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);
}
}

作者: icris    时间: 2014-7-31 17:27
虽然写 a = 4 ,但是 a 不是 4 ,是一个变量名,a = 2 是重新赋值,之后在这个方法内部的 a 就等于 2 了
作者: 玥夜    时间: 2014-7-31 17:32
icris 发表于 2014-7-31 17:27
虽然写 a = 4 ,但是 a 不是 4 ,是一个变量名,a = 2 是重新赋值,之后在这个方法内部的 a 就等于 2 了 ...

哦  那就是跟我传的值没有关系了 在这个方法中是用不到的  是吧     在show方法中 a就等于2  对吧 :D
作者: wisely    时间: 2014-7-31 17:37
这个问题非常经典,多谢楼主分享。

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

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

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

其实楼主的意思很接近了,只不过不是4=2,而是2把4赶走了
作者: icris    时间: 2014-7-31 17:37
玥夜 发表于 2014-7-31 17:32
哦  那就是跟我传的值没有关系了 在这个方法中是用不到的  是吧     在show方法中 a就等于2  对吧  ...

不是没关系,把 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是基本类型变量,不是引用类型的,所以此方法里的a变成了4,外面main方法里的a原值是不变的
作者: 玥夜    时间: 2014-7-31 17:50
wisely 发表于 2014-7-31 17:37
这个问题非常经典,多谢楼主分享。

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

谢谢  好像是懂了  就是我在show中重新给a赋值  就是在a=2上面有一个隐式a=4 对吧
作者: 玥夜    时间: 2014-7-31 17:52
wisely 发表于 2014-7-31 17:37
这个问题非常经典,多谢楼主分享。

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

如果我直接传个5 进去 也是相当于有个a=5 对么 然后在a=2.。。。
作者: 玥夜    时间: 2014-7-31 17:53
icris 发表于 2014-7-31 17:37
不是没关系,把 a = 2 去掉的话这个方法里 a 就等于 4 了。
在 a = 2 之前 a 就是 4 了,可以把打印前移 ...

哦  知道了   谢谢
作者: 玥夜    时间: 2014-7-31 17:54
Bule丶 发表于 2014-7-31 17:45
你在main方法里初始化的a=4,传值到show里,shou方法里把a重新赋值,赋值的只是show(int a)这个a,因为a是 ...

恩   谢谢  好像懂了:D




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