Java中除了字符串之外还有不可变的对象吗?

Java中除了字符串之外还有不可变的对象吗?,java,c++,string,object,immutability,Java,C++,String,Object,Immutability,我只听说Java中的字符串不能是不可变的,我想知道除了字符串之外,还有其他对象也是不可变的吗 在一个旁注下,C++中的字符串也是不可变的吗?< /P> < P>许多原始类型是不可变的(整数、长、布尔等)。不变性不是java中明确指出的东西,它实际上是一种语义契约。您可以通过将任何类的成员声明为final、在构造时分配它们以及通过类的公共接口锁定访问来使其不可变 C++中的字符串是以零字符结尾的字符数组。就这样。虽然const的使用有助于锁定访问,但这并不能保证不可变 我想关键是Java中的许多

我只听说Java中的字符串不能是不可变的,我想知道除了字符串之外,还有其他对象也是不可变的吗


在一个旁注下,C++中的字符串也是不可变的吗?< /P> < P>许多原始类型是不可变的(整数、长、布尔等)。不变性不是java中明确指出的东西,它实际上是一种语义契约。您可以通过将任何类的成员声明为final、在构造时分配它们以及通过类的公共接口锁定访问来使其不可变

C++中的字符串是以零字符结尾的字符数组。就这样。虽然const的使用有助于锁定访问,但这并不能保证不可变


我想关键是Java中的许多东西是不可变的,但只有文档和源代码才能真正向您证明这一点。

许多原语类型是不可变的(整数、长、布尔等)。不变性不是java中明确指出的东西,它实际上是一种语义契约。您可以通过将任何类的成员声明为final、在构造时分配它们以及通过类的公共接口锁定访问来使其不可变

C++中的字符串是以零字符结尾的字符数组。就这样。虽然const的使用有助于锁定访问,但这并不能保证不可变


我想关键是Java中的许多东西都是不可变的,但只有文档和源代码才能真正向您证明这一点。

所有装箱原语,例如Integer,都是不可变的


您可以自己创建不可变的类—例如,一个使用构造函数设置变量的类,并且没有公共变量或setter。

所有装箱原语(例如Integer)都是不可变的



您可以自己创建不可变类—例如,一个使用构造函数设置变量的类,它没有公共变量或setter。

是的,Java中有许多不可变对象。我将把它留作练习,让读者找到一些,并创造一些。而且,C++字符串不是不可变的。它们只是字符数组。嗨,气垫船。哇,我很惊讶还有其他不可变的对象。好的,我会找到一些或创建一些作为学习练习。没什么好惊讶的。有一个很好的理由解释为什么有这么多这样的对象,你真正应该做的是找出为什么不可变对象如此吸引人,它们的好处到底是什么。我确实找到了一个原因:安全性是的,Java中有很多不可变的对象。我将把它留作练习,让读者找到一些,并创造一些。而且,C++字符串不是不可变的。它们只是字符数组。嗨,气垫船。哇,我很惊讶还有其他不可变的对象。好的,我会找到一些或创建一些作为学习练习。没什么好惊讶的。有很多很好的理由说明为什么有这么多的这些,你真正应该做的是找出为什么不可变的对象如此吸引人,它们的好处究竟是什么。我确实找到了一个原因:安全性“字符串”是C++中的一个概念,有很多实现。以null结尾的字符串是以零字符结尾的字符数组。还有代码< > STD::代码> STD::WString ,代码> cString < /C> >,代码> > BSTRUTT < /COD>,<代码> QString ,5种字符串文字,<代码> String SuffRe>……代码,我的C++知识是从我的大学时代遗留下来的,但是如果你给它分配了一个新的值,你可以改变它的值,不是吗?我看不出原语是如何不可变的。@user983246这不会更改原语的值。这些是引用类型,因此如果您有整数a=Integer.valueOf(1);之后,a=Integer.valueOf(2)-a现在引用Integer类的一个不同的、不可变的实例。更好的例子是,假设您调用了someInstance.setFoo(a);那么a=整数。值为(10);-someInstance仍将具有原始值“a”,而不是10。你看到区别了吗?哦,有两个不同的物体!“字符串”是C++中的一个概念,有很多实现。以null结尾的字符串是以零字符结尾的字符数组。还有代码< > STD::代码> STD::WString ,代码> cString < /C> >,代码> > BSTRUTT < /COD>,<代码> QString ,5种字符串文字,<代码> String SuffRe>……代码,我的C++知识是从我的大学时代遗留下来的,但是如果你给它分配了一个新的值,你可以改变它的值,不是吗?我看不出原语是如何不可变的。@user983246这不会更改原语的值。这些是引用类型,因此如果您有整数a=Integer.valueOf(1);之后,a=Integer.valueOf(2)-a现在引用Integer类的一个不同的、不可变的实例。更好的例子是,假设您调用了someInstance.setFoo(a);那么a=整数。值为(10);-someInstance仍将具有原始值“a”,而不是10。你看到区别了吗?哦,有两个不同的物体!你说的盒装是什么意思?@user983246,看到你说的盒装是什么意思了吗?@user983246,看到了吗