一、双目运算符中的“==”
1、栈与堆的存储形式
一、栈中存储基础类型的变量和对象的地址:
二、堆中存储对象的属性及方法:其中含有变量池
2、“==”的作用范围
一、“==”作用在栈里;等号两边出现两个变量时,比较的应该是存在栈里的值
二、在使用基本数据类型比较时会直接比较值的相同,而使用对象变量比较时比较的是地址是否相同;
二、String类型创建的对象
1、在堆中常量池创建对象
String str ="Tom";
String str2="Tom";
System.out.println(str==str2);
使用String定义后直接赋值的方法,在常量池中创建的对象,当再次创建时会先常量池中进行一次搜索,若是已经存在,则直接将该地址赋值给新的变量;结果为:true
2、在堆中创建对象
String str =new String("Tom");
String str2=new String("Tom");
System.out.println(str==str2);
使用new String();创建对象的方法会在堆中常量池以外的区域创建一个新的对象,并将对象的地址赋值给栈中的变量;所以上述运行的结果为:false
3、区别
个人觉得两者的区别就在于变量池共享,此时存在两个变量地址相同的情况;