在Java中,不可变类是一个类(整数、字节、长、浮点数、双精度、字符、布尔值和短),一旦创建,其主体就不能更改,同样的情况也适用于不可变对象,一旦创建就不能更改。现在的问题是,在Java中处理原始数据类型时,我们确实需要包装类的帮助,这些类是不可变的。
null
极客们,现在你们一定想知道为什么我们要让他们不变,为此我们将列出一些优势,如下所示:
- 它们是自动同步的,因为它们的状态不能根据不变性的定义进行更改。
- 不一致的范围为零,因为包装器类的对象无法更改。
- 它有助于缓存,因为特定类型的一个实例本身可以方便十几个应用程序。
提示: 包装类作为不可变对象的最佳用途是作为映射的键。
例子:
JAVA
// Java Program to Demonstrate that Primitive // Wrapper Classes are Immutable // Main class class GFG { // Main driver method public static void main(String[] args) { // Getting an integer value Integer i = new Integer( 12 ); // Printing the same integer value System.out.println(i); // Calling method 2 modify(i); // Now printing the value stored in above integer System.out.println(i); } // Method 2 // To modify integer value private static void modify(Integer i) { i = i + 1 ; } } |
输出:
输出说明:
在这里,参数“i”是修改中的引用,并引用与main()中的“i”相同的对象,但对“i”所做的更改不会反映在main()方法中。这是因为所有的原始包装类(整数、字节、长、浮点、双精度、字符、布尔和短)在Java中都是不可变的,所以像加法和减法这样的操作会创建一个新对象,而不会修改旧对象。 modify方法中的以下代码行操作的是包装类Integer,而不是int,并按如下所述执行以下操作:
i = i + 1;
- 将“i”解装箱为int值
- 再加上1
- 将结果放入另一个整数对象中
- 将结果整数赋值给“i”(从而更改“i”引用的对象)
由于对象引用是按值传递的,因此在修改后的方法中执行的操作不会更改在修改调用中用作参数的i。因此,在方法返回后,主例程仍然打印12。
本文由 约格什多希 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END