Java 整数缓存
Java 是当今使用最广泛的编程语言之一,因为它包含高级功能和特性。在 Java 的每个新版本中,其开发人员都会添加新的功能和特性,整数缓存就是 Java 5 中引入的一项功能。在本教程中,我们将了解 Java 中的整数缓存是什么以及它在编程中的重要性。
什么是 Java 中的整数缓存?
从“缓存”这个词,读者可以猜测我们正在讨论将整数存储在内存中并在需要时重复使用它。是的,你猜对了。但问题是为什么我们需要整数缓存。
让我们通过示例代码了解整数缓存是如何工作的以及为什么我们需要它。
示例
在下面的示例中,我们定义了第一个和第二个整数变量,并用 100 初始化它们,该值在 -128 到 127 的范围内。之后,我们比较了这两个变量,并根据比较结果打印了真或假的值。
此外,我们还定义了第三个和第四个整数变量,并用 130 值初始化它们,这些值不在 -128 到 127 的范围内。此外,我们还比较了它们并在输出中显示了结果值。
import java.io.*; public class Main { public static void main(String[] args) { Integer first = 100; Integer second = 100; // It prints true only when both objects have the same reference if (first == second) { System.out.println("true"); } else { System.out.println("false"); } Integer third = 130; Integer fourth = 130; if (third == fourth) { System.out.println("true"); } else { System.out.println("false"); } } }
输出
true false
如果我们猜测输出,两者都应该返回“false”输出,因为“==”运算符用于匹配对象的引用。“==”运算符仅当两个对象具有相同的引用时才返回 true。但是,如果我们需要在 Java 中比较对象值,我们可以使用 equals() 方法,但我们不能使用“==”运算符来匹配对象值。
因此,可以明确的是,“==”在两个对象具有相同引用时返回 true,并且对于“first”和“second”对象的比较返回 true。这意味着“first”和“second”对象具有相同的引用。
那么,问题是“first”、“second”、“third”和“fourth”都是整数对象,但它只返回“first”和“second”的比较为 true,而“third”和“fourth”的比较则不为 true。
这里,整数缓存的概念就出现了。
包含 -128 到 127 的值是最常用的整数。因此,当程序员使用 -128 到 127 范围内的值创建一个新的整数对象时,JVM 首先检查内存中是否存在具有相同值的同一对象。如果是,则返回同一对象的引用。否则,它会创建新对象并返回该对象的引用。
现在,程序员清楚了为什么“first”和“second”对象的比较由于缓存而返回 true。
但是,如果我们使用“new”关键字创建对象,它始终会在内存中创建一个新对象。因此,在这种情况下,整数缓存不起作用。
Integer first = new Integer(13); Integer second = new Integer(13);
在上面的代码中,对象的取值介于 -128 到 127 之间。尽管如此,当我们使用构造函数创建对象时,比较这两个对象时仍将返回 false。
整数缓存的好处
内存优化 - 如果整数对象存在,则整数缓存会对 -128 到 127 之间的整数使用相同的对象,而不是创建新的对象。它节省了设备的内存。
性能 - 对象的创建需要分配内存并初始化对象。因此,使用现有对象进行创建提高了应用程序的性能。
结论
简单来说,整数缓存功能用于缓存内存中最常用的整数对象以供重复使用。它通过使用现有对象来提高应用程序的内存优化和性能。