程序少写了一句,应该是:
public class FinalData {
final int[] a = { 1, 2, 3, 4, 5, 6 };
//......
public static void main(String[] args) {
FinalData fd1 = new FinalData();
for(int i = 0; i < fd1.a.length; i++)
fd1.a[i]++;
}
}//---------编译通过
public class FinalData {
final int[] a = { 1, 2, 3, 4, 5, 6 };
//......
public static void main(String[] args) {
FinalData fd1 = new FinalData();
for(int i = 0; i < fd1.a.length; i++)
fd1.a[i]++;
}
}//---------编译通过
解决方案 »
- 下载的飞机定票系统(java)无法运行
- 帮我看一下这代码有什么错?
- 实在解决不了,又是编码问题,mysql已经设为utf8编码,我写了一个Java应用程序,在dos下直接运行它,把数据插入乱码
- 小声的问个关于JAVA很弱的问题
- 连接ms sqlserver 2000时出现:End of stream was detected on a read.
- SOS 使用eclipse时Jboss怎么安装配置呀,eclipse-examples-2.1.1-win32.zip.md5怎么解压?谢谢
- Applet问题:如何在关闭Applet的同时,一起将Applet所在IE窗口关闭?
- 我再用jbuilder6可是为什么光标总是会在输入得前两个位置阿
- 有了jfreechart,jakarta poi包,在实际编程时怎么使用?
- j2ee/j2se/j2me的区别是什么??
- 坚决拥护Luodi做版主,改善Java版的不景气现状!!同意的跟帖
- 要在IE中显示SWING里的控件光用HTMLCONV1_3转换就行了吗?请高手指教
你想急死我...
如上面的例子,是句柄的话,用final修饰后还可以改变其值,不是的话就不行了...
int[][][] a=new int[3][3][3]; a 是一个对象,这个对象是一个由三个对象组成的数组对象;// int[][][]a = new int[3][][];a[0]是一个对象,它也是一个由三个对象组成的数组// a[0] = new int[3][];a[0][0] 是一个对象,它是一个有三个整型组成的数组
a[0][1] 第二个对象,它是一个有三个整型组成的数组
a[0][2] 第三个对象,它是一个有三个整型组成的数组;同理 a[1],a[2],计算结果是: 1 + 4 + 4 + 4 = 13 个。整数(int) 不是对象,因此不是引用(句柄), a[i][j][k] 在这种情况下不是句柄。
to:ender(ender)
我想问的是:如果像你们说得,a[i]不是句柄的话,那在上面的代码中,final数据成员的值是不允许被改变的!
如果像你们说得,a是句柄而a[i]是整数值的话,刚好和你说得相反,是a所指的对象的值可被改变,而a[i]的值却不能被改变了.
因为:"可以改变final句柄所指对象的值,但不能令他重新指向..."
难道你的意思是说 final int[] a 以后,a是fianl的,而a[i]不是final的?
我理解的对吗??
对于a[],a只是一个指向该数组首地址的指针而已,而你final的正是这个指针……清楚了没?
a是final的,a[i]不是final的。
a是句柄,a[i]不是句柄,a[i]是int。
是这样吧
这样说来挺简单的,也不知我被哪里绕住了.
回想这几天看<thinking in java>,不寒而栗,也不知有多少不清楚的概念被掩盖了... ...
谢了几位.