【发布时间】:2010-07-21 11:14:15
【问题描述】:
Wrapper 类(如 Integer、Double 等)的内部原始值没有设置器的原因是什么?
我之所以这么问,是因为这种功能会简化微积分,并使 Java 语言更加灵活。
让我举几个例子。
1) 举个例子:
Integer x = new Integer(5);
x++;
前面的幕后代码正在执行自动装箱。比如:
int x_tmp = x.intValue();
x_tmp++;
x = new Integer(x_tmp); // Yes that's a new memory allocation
由于这个问题,在 Wrapper 上进行演算比在普通原始类型上执行要慢。使用 setter 会更容易增加内部值,而无需在堆上分配另一个对象。
2) 另一个困扰我的问题是,在 Java 中不可能像在 C(使用指针)或 C++(指针或引用)中那样编写交换函数。
如果我写 void swap(Integer x, Integer y) 我无法访问内部值,因为我不可能交换这些值。
PS: 我的一个朋友建议我应该考虑更大的图景,并考虑并发性和类型不变性。
那么你对此有什么解释吗? 谢谢!
【问题讨论】:
标签: java wrapper setter primitive-types immutability