堆内存
堆内存和栈内存是Java在Ram中存储数据的空间。通过new得到的的对象和数组都存于堆中,遵循先进先出原则,允许动态分配内存(但是会造成效率低的问题)。Java虚拟机的垃圾回收会自动管理堆内存,不需要用户进行操作。
栈内存
栈内存主要用来执行程序,栈内存存储基本类型的变量和引用。栈执行先进后出的原则,效率更高。
// 基本类型的变量存在栈中
int a = 1;
int b = 2;
// 对象的引用变量存在栈中
String s = "345"
// arr存在栈中 {6, 7, 8}存在堆中
// 栈中arr指向堆中{6, 7, 8}地址
int[] arr = {6, 7, 8};
String与堆栈
String s1 = "123";
String s2 = new String("123");
String s3 = "1";
String s4 = "23";
String s5 = "1" + "23";
String s6 = s3 + "23";
String s7 = "1" + s4;
String s8 = s3 + s4;
System.out.println(s1 == s2); // F
System.out.println(s1 == s5); // T
System.out.println(s1 == s6); // F
System.out.println(s1 == s7); // F
System.out.println(s1 == s8); // F
System.out.println(s2 == s5); // F
System.out.println(s2 == s6); // F
System.out.println(s2 == s7); // F
System.out.println(s2 == s8); // F