关于final 修饰 Integer的问题

zhongcheng60 2009-10-14 06:57:20


class A{
int i=0;
}

public class Test2 {

private static final int i=0;
private static final Integer integer= new Integer("1");
private static final A a=new A();
private static final String string="a";

public static void main(String[] args) {
a.i++;

//string="string"; 报错 因为是final的 所以不能让它重新指向别的对象
//i++;报错 说integer是final的
//integer++; 报错了 和上面一样

//可是integer 明明是包装器类型啊 难道说integer++ 让它重新指向了一个新的 Integer对象?
//我在java编程思想里 看到 作者说
//final 修饰的 int 不可以改变值 但是 换成Integer 其值 就是可以改变的
// 不知道是不是 jdk版本的问题
}

}



...全文
920 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbro001 2009-10-15
  • 打赏
  • 举报
回复
记号...
tfsict2008 2009-10-14
  • 打赏
  • 举报
回复 2
java里面的封装类都是final的,例如String str = "ss"; str += "d";那么str就重新变为另一个对象的引用了,这就改变了原来final的引用了
swandragon 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhongcheng60 的回复:]
引用 8 楼 sforiz 的回复:
引用 5 楼 zhongcheng60 的回复:
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

java doc中是这么描述的

按理说integer++ 应该是改变它封装起来的 int 的值才对啊
就和a.i++ 一样才对嘛

难道 java编程思想的作者 自己都没有试过 就乱说?


一样吗????
i是A类中的一个属性,a.i++和integer++不一样,
首先final是终态的意思,只能赋值一次,a.i++只是改变A类中的属性i的值,integer势必会造成重新赋值、、

那么为什么 “integer势必会造成重新赋”?
而不是改变 integer当中的 int 属性?
[/Quote]

要怎么能改变int值呢?
zhongcheng60 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sforiz 的回复:]
引用 5 楼 zhongcheng60 的回复:
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

java doc中是这么描述的

按理说integer++ 应该是改变它封装起来的 int 的值才对啊
就和a.i++ 一样才对嘛

难道 java编程思想的作者 自己都没有试过 就乱说?


一样吗????
i是A类中的一个属性,a.i++和integer++不一样,
首先final是终态的意思,只能赋值一次,a.i++只是改变A类中的属性i的值,integer势必会造成重新赋值、、
[/Quote]
那么为什么 “integer势必会造成重新赋”?
而不是改变 integer当中的 int 属性?
sforiz 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhongcheng60 的回复:]
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

java doc中是这么描述的

按理说integer++ 应该是改变它封装起来的 int 的值才对啊
就和a.i++ 一样才对嘛

难道 java编程思想的作者 自己都没有试过 就乱说?
[/Quote]

一样吗????
i是A类中的一个属性,a.i++和integer++不一样,
首先final是终态的意思,只能赋值一次,a.i++只是改变A类中的属性i的值,integer势必会造成重新赋值、、
zhongcheng60 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thc1987 的回复:]
你就把Integer看成是int 一旦被final就不能改变其值了
[/Quote]
哈哈 对哈 以后就这么看就成了
猿敲月下码 2009-10-14
  • 打赏
  • 举报
回复
你就把Integer看成是int 一旦被final就不能改变其值了
zhongcheng60 2009-10-14
  • 打赏
  • 举报
回复
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

java doc中是这么描述的

按理说integer++ 应该是改变它封装起来的 int 的值才对啊
就和a.i++ 一样才对嘛

难道 java编程思想的作者 自己都没有试过 就乱说?
zhongcheng60 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cooler4k 的回复:]
final修饰的基本类型是不允许改变值的
final修饰的引用类型是不允许重新指向别的对象
[/Quote]
这个我知道啊
我只是奇怪 Integer 是对象类型 integer++ 居然让它重新指向了一个对象
cooler4k 2009-10-14
  • 打赏
  • 举报
回复
final修饰的基本类型是不允许改变值的
final修饰的引用类型是不允许重新指向别的对象
rookie001 2009-10-14
  • 打赏
  • 举报
回复
自动解包
cooler4k 2009-10-14
  • 打赏
  • 举报
回复
i++ 相当于 i = i +1 ; 就是重新赋值嘛
integer ++ 相当于 integer = integer + 1 ;就相当于引用指用一个新的Integer对象

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧