And*_*anu 4 java setter immutability wrapper primitive-types
为什么Wrapper类(如Integer,Double等)没有内部原始值的setter是什么原因?
我问这个是因为这种功能会简化微积分,并使Java语言更灵活一些.
让我举几个例子.
1)我们来看下面的例子:
Integer x = new Integer(5);
x++;
Run Code Online (Sandbox Code Playgroud)
幕后的前一个代码是执行自动装箱.就像是:
int x_tmp = x.intValue();
x_tmp++;
x = new Integer(x_tmp); // Yes that's a new memory allocation
Run Code Online (Sandbox Code Playgroud)
由于这个问题,在Wrapper上执行微积分比在普通原始类型上执行要慢.使用setter,可以更容易地增加内部值,而无需在堆上分配另一个对象.
2)另一个困扰我的问题是,在Java中编写交换函数是不可能的,就像我在C(使用指针)或C++(指针或引用)中所做的那样.
如果我写,void swap(Integer x, Integer y)我无法访问内部值因为,并且我将无法交换值.
PS:我的一个朋友建议我应该考虑更大的图景,并考虑并发性和类型不变性.
所以你有解释吗?谢谢!
| 归档时间: |
|
| 查看次数: |
2180 次 |
| 最近记录: |