包装类(如 Integer、Double 等)没有为其内部原始值设置 setter 的原因是什么?
我问这个问题是因为这种功能可以简化微积分,并使 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)
我无法访问内部值,因为我不可能交换这些值。
附:
我的一个朋友建议我应该考虑更大的前景,并从并发性和类型不变性的角度进行思考。
那么你对此有什么解释吗?
谢谢!
除非需要将包装类放入集合中,否则通常不会使用它们。如果它们是可变的,那么在集合内部使用并作为哈希表的键就会出现问题。
集合和哈希表需要哈希值始终相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)