gpt4 book ai didi

java - 为什么 Primitives 的包装类没有 setter?

转载 作者:搜寻专家 更新时间:2023-11-01 01:09:22 24 4
gpt4 key购买 nike

Wrapper 类(如 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) 我无法访问内部值,因为我不可能交换这些值。

附言:我的一个 friend 建议我应该考虑更大的图景,并从并发性和类型不变性的角度来思考。

那么你对此有解释吗?谢谢!

最佳答案

通常不使用包装类,除非您需要将它们放入集合中。如果它们是可变的,那么在集合内部使用和作为哈希表的键时就会出现问题。

集合和哈希表需要哈希值始终相同。

关于java - 为什么 Primitives 的包装类没有 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com