📅  最后修改于: 2023-12-03 15:02:04.084000             🧑  作者: Mango
Java内部化指的是将常用的固定不变的对象共享在内存中,避免重复创建相同的对象,节约内存空间和提高程序执行效率。
Java中内部化的类型包括:
Java对于原始数据类型的内部化做了优化,例如对于byte、short、int、long等类型,Java会内化-128~127范围的数值。因为这个范围内的数值被反复使用的概率很高,内部化可以避免重复创建对象,提高程序执行效率。
对于String类型的内部化,我们可以通过intern()方法实现。对于字符串“hello world”,在程序中多次使用这个字符串时,如果每次都新建一个String对象,就会造成内存的浪费。但是如果使用intern()方法,可以将这个字符串加入常量池中,在需要时可以直接获取。
String str1 = new String("hello world");
String str2 = "hello world";
String str3 = str1.intern();
System.out.println(str1 == str2); //false
System.out.println(str2 == str3); //true
Java程序运行时内存被分为了多个区域,其中包括了常量池。
常量池用来存储编译期生成的字面量和符号引用,在程序运行时,被加载到运行时常量池中,供程序调用。在Java SE 7及以上版本中,常量池已经不再属于永久代,而是属于堆的一部分。
String str1 = "hello world";
String str2 = "hello world"; //这里使用了之前的字符串对象,而非新建一个String对象
System.out.println(str1 == str2); //true