import java.util.*;
class Apple {
private static long counter;
private final long id = counter++;
public long id() {return id;}
}public class ApplesAndOrangesWithGenerics {
public static void main(String[] args) {
ArrayList<Apple> apples = new ArrayList<Apple>();
for (int i = 0; i < 3; i++)
apples.add(new Apple());
for (int i = 0; i< apples.size(); i++)
System.out.println(apples.get(i).id());
for (Apple c : apples )
System.out.println(c.id());
}
}这里的id()方法返回的id是个final long就应该是个常量,不能被改变吧?
可是为什么会输出0,1,2三个呢?
实在费解啊?
class Apple {
private static long counter;
private final long id = counter++;
public long id() {return id;}
}public class ApplesAndOrangesWithGenerics {
public static void main(String[] args) {
ArrayList<Apple> apples = new ArrayList<Apple>();
for (int i = 0; i < 3; i++)
apples.add(new Apple());
for (int i = 0; i< apples.size(); i++)
System.out.println(apples.get(i).id());
for (Apple c : apples )
System.out.println(c.id());
}
}这里的id()方法返回的id是个final long就应该是个常量,不能被改变吧?
可是为什么会输出0,1,2三个呢?
实在费解啊?
解决方案 »
- java成员变量是放在内存那块地方?
- Hibernate2 Like搜索Query#list()速度奇慢的怪问题
- JUnit中测试类的测试方法会不会互相影响
- 二维数组中找 那个元素为0 的问题
- arraylist 去除相同值问题!!!!
- 兄弟们帮忙瞧瞧,不知道帮忙顶也给分阿。
- 请教怎样获得记录集的整条记录的信息?在线等!!!急!!!
- 哪位大虾能推荐几本关于Java通信方面的好书
- SmartUpload中下载word文件的乱码问题,急!!
- 受不了JAVA了,照书打了一段程序居然出错,哪位大侠能帮我看看
- 关于一个数组函数的问题
- TIJ4 Chapter Control, Exercise 4, page 139
你声明的id的内存地址是初始地址也是最终地址,但是每调用一次id方法counter++,地址始终不变,改变的是id的值。
我记得这个案例很像以前一个案例,
问:String到底变了没有?
String s=“hello”;
s=s+“world!”;
我觉得你说的问题和这个问题有相同性。s原先指向一个String对象,内容是“hello”,然后我们对s进行了“+”操作,s指向的对象并没有发生改变。这时,s不指向原来那个对象了,而指向了另外一个对象,内容为“hello world!”,原来那个对象还存在于内存之中,只是s引用这个变量不再指向它了。