我知道适用于一般不可变类的常见原因,即
但是,包装器类表示原始类型,并且原始类型是可变的。那么为什么包装器类不可变?
但是,包装器类表示原始类型,并且原始类型(String除外)是可变的。
首先,String不是原始类型。
其次,谈论原始类型是可变的没有意义。如果您像这样更改 变量 的值:
int x = 5;
x = 6;
那不是在更改数字5,而是在更改的值x
。
在我看来,尽管包装器类型本来可以变得可变,但这样做却很烦人。我经常使用这些类型的只读集合,并且不希望它们是可更改的。偶尔我想要一个可变的等效项,但是在那种情况下,提出一个或使用这些Atomic*
类就足够了。
我发现自己希望这样做,Date
并且Calendar
变得不可变的频率要比我希望Integer
自己变得可变的要多得多(当然,我通常会去找Joda
Time,但是Joda Time的好处之一 就是 不变性。)
问题内容: Java包装器类应该是不可变的。这意味着一旦创建了对象,例如 其值不能更改。但是,这样做 是完全有效的。 那么,在这种情况下不变性是什么意思?这与自动装箱/拆箱有关吗?如果是这样,有什么办法可以防止编译器执行此操作? 谢谢 问题答案: 是参考。您的代码将引用更改为指向另一个相同的,不变的。 可能会更有用。
问题内容: 在较高的层次上,我知道我们需要通过使用它们各自的包装类在Java集合中使用它们来“包装”原始数据类型,例如int和char。我想了解Java集合如何在低级询问:“为什么我们需要将原始数据类型包装为对象才能在集合中使用它们?”在此先感谢您的帮助。 问题答案: 在虚拟机级别,这是因为与引用类型(例如java.lang.Object及其派生类型)相比,原始类型在内存中的表示方式非常不同。例如
问题内容: 我知道包装器类是什么,它们将原始类型(例如int,double等)包装到各自类的对象中。 但是,为什么我们首先需要包装器类?为什么不简单地在我们拥有原始类型的地方使用它们呢? 问题答案: 几种可能的原因: 这样就可以有一个空值 包含在集合中 将一般/多态与其他对象一起视为对象
本文向大家介绍浅谈为什么Java里面String类是不可变的,包括了浅谈为什么Java里面String类是不可变的的使用技巧和注意事项,需要的朋友参考一下 在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题 Java语言的创建者James Gosling,曾经在一次采访中被人问到:什么时候应该使用
问题内容: 有人问我为什么String是不可变的 我这样回答: 当我们在Java中像这样创建一个字符串时,;将在字符串pool(hello)中创建一个对象,并且s1将指向hello。现在再次执行该操作;将不会创建另一个对象,但是s2将指向该对象,hello 因为JVM将首先检查如果在字符串池中是否存在相同的对象, 如果不存在则仅创建一个新对象。 现在,如果假设Java允许串可变那么如果我们改变S1
本文向大家介绍String 为什 么是不可变的?相关面试题,主要包含被问及String 为什 么是不可变的?时的应答技巧和注意事项,需要的朋友参考一下 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,`private final char value[]`,所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 Ab