"Integer对象是不可变的"-----关于final和封装器的问题,望高手指点!
来源: 互联网 发布时间:2015-11-16
本文导语: 比如,封装器Integer是final的,我们不能从它派生自己的类. 书上又说不能利用封装器来改变一个数字参数,因为"Integer对象是不可变"的. 这里的不可变是因为Integer类是final的原因吗???? | 1.不可变,...
比如,封装器Integer是final的,我们不能从它派生自己的类.
书上又说不能利用封装器来改变一个数字参数,因为"Integer对象是不可变"的.
这里的不可变是因为Integer类是final的原因吗????
书上又说不能利用封装器来改变一个数字参数,因为"Integer对象是不可变"的.
这里的不可变是因为Integer类是final的原因吗????
|
1.不可变,也即英文的immutable性是指一个对象一旦生成后,以后该对象的状态不能被改变。其实不可变性只是类没有定义改变属性的方法而已。如果类定义了可以改变属性的方法,那么给类就是可变的。
2.final,final是一个修饰符,表明该类为最终类,不能被别人继承。这跟不可变性没有任何挂钩。也就是说一个final类,可以不是immutable的,只要定义了相应的方法。
3.Wrapper类,全部是final类、同时也是immutable的
2.final,final是一个修饰符,表明该类为最终类,不能被别人继承。这跟不可变性没有任何挂钩。也就是说一个final类,可以不是immutable的,只要定义了相应的方法。
3.Wrapper类,全部是final类、同时也是immutable的
|
不可变,英文叫做:immutable.
Java并没有immutable keyword.immutable是由代码来保证的。
比如:
class Int{
private final int i;
Int(int i){this.i=i;}
int getValue(){return i;}
Int add(int j){return new Int(i+j);}
}
这里,Int就是immutable的。一旦你生成了一个Int对象,它的状态永不改变。
对类的final声明只是保证它不能被继承。
之所以Integer类要被声明为"final", 是因为它要保证任何一个Integer的对象的状态都不会变化,害怕子类会不遵循这个immutable的规定。
Java并没有immutable keyword.immutable是由代码来保证的。
比如:
class Int{
private final int i;
Int(int i){this.i=i;}
int getValue(){return i;}
Int add(int j){return new Int(i+j);}
}
这里,Int就是immutable的。一旦你生成了一个Int对象,它的状态永不改变。
对类的final声明只是保证它不能被继承。
之所以Integer类要被声明为"final", 是因为它要保证任何一个Integer的对象的状态都不会变化,害怕子类会不遵循这个immutable的规定。
|
你说对了,Integer等引用类都是final的
|
被申明为final的类是不能被继承的
|
fianl关键字是表示此类不可被继承,与"Integer对象是不可改变的"没有直接关系。
"Integer对象是不可改变的"指的是任何对一个Integer类的实例的操作都会产生一个新的对象!
一定要弄清。
"Integer对象是不可改变的"指的是任何对一个Integer类的实例的操作都会产生一个新的对象!
一定要弄清。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。