JAVA核心技术一书中一个不能理解的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:05:12
在JAVA核心技术一书中的第113页中的例4-3程序中有这样一个方法如下:
public void setId()
{
id=nextId;
nextId++;
}
这个方法是将静太变量nextId的值赋给id,然后nextId++,指向下一个可用的量.问题就在这里:JAVA中不是值传递吗?id和nextId两个变量指向同一个引用,那为什么nextId的值改变而id的值不变呢?比如nextId初值为1,赋给id后,id的值也为1,nextId++后变为2,为什么id的值没有变成2呢?请各位高手解答一下,谢谢!
哪位朋友能帮忙解释一下吗?加分了
private static int nextId=1;
private int id;

JAVA中不是值传递吗?
对阿,对于基本数据类型像int就是值传递。

id和nextId两个变量指向同一个引用
这就不对了,前面说了是值传递。
int 等基本数据类型不是对象,对象才会涉及到“同一个引用”的问题。

假设代码改称:
private static Integer nextId ; 就是你说的那种对象引用情况了。

id=nextId这是基本数据类型的直接赋值啊大哥
id=nextId;
nextId++;
id=nextId;//这时再赋一次就会变了,是nextId的值变了,id取的是其某一时刻的值

nextId是静态值,可以改变吗????

如果你一定要用指针来解释的话:
id=nextld;//把nextld当前的指针传给id
nextld++;//nextld的指针就再往下移动了
而id的指针就还在它原先的位置...

基础类型在java里就是一块内存空间,int a 传给 int b 就是a把自己的值复制一份给b 两个变量的内存地址并不一样,所以a++ 并不会影响到b
还有java里没有指针类型,只有引用
引用是不能用++来运--算的,nextid++不会指向下一个变量 只会从1变成2