关于栈内存和堆内存
栈内存:存的是变量的名称
堆内存:存的是变量
通过栈内存可以指向堆内存中对应的变量
Person per = new Person();
等号左边存在栈内存里
等号右边存在堆内存里
关于变量声明中,使用new和不使用时内存的变化:
1、无论是否new,栈内存里都会有一个新的变量。
2、使用new的话,
(1)堆内存中一定创建一个新变量,无论堆内存中原本是否有相同的变量;
(2)如果堆内存的字符串池中没有该变量,则在字符串池中新建变量,如果堆内存的字符串池中有该变量,则不需再在字符串池中新建变量。
3、不使用new的话,只在字符串池中创建该变量,如果字符串池中已经存在该变量,则不需要创建,直接指向已有的即可。
String str1 = new String(“Hello”);
String str2 = new String(“Hello”);
String str3 = “Hello”;
String str4 = “Hello”;
String str5=str4;
str5=“World”;
双等(==)比的是变量地址,所以str1 == str2是错的,上图可以看出两个地址指向不同。
equals()比的是变量内容本身,所以str1.equals(str2)是对的。