image.png
引用类型,==比较的是地址
String str1="abc" 相当于直接new 了一个string的对象,值在堆内存的字符串常量池
String str2="abc" 先是在字符串常量池里面寻找,如果有这个对象,那么直接就赋值给str2,
所以str1和str2的地址相同
char[] charArray={'a','b','c'}
现在堆里面创建一个char[]类型的对象,
String str3=new String(charArray),
在堆里面创建一个字符串的对象,然后将char类型转换为byte[],然后将地址给str3
String 是个引用类型,一旦定义是不可变得
String str1=“123”,
str1 ="234" //相当于重新new了一个对象
== 和equals的区别
基本数据类型 == 比较的就是值
引用数据类型 或者对象
重写了 equals 比较的就是值
没有重写 equals 比较的还是地址
所以一般来讲 == 比较地址,equals比较值
int a =0;
int b=0
a==b; true 基本数据类型 == 就是比较值
------------------------------------------------------
String str1="abc" ;
String str2="abc";
str1 == str2 true 引用数据类型 == 比较的就是地址(因为String 有个字符串常量池,所以这个值为true)
Persion p1= new Persion("张三");
Persion p2 =new Persion("张三");
p1 ==p2 false == 比较的是地址
------------------------------------------------------
基本数据类型没有equals
String str1 = "abc";
String str2 = new String("abc");
str1 == str2 false 此时两个地址不一样
str1.equals(str2) true //比较的是内容 原因是 String 重写了 equals 方法
Persion p1= new Persion("张三");
Persion p2 =new Persion("张三");
p1== p2 false 此时两个地址不一样
p1.equals(p2) false //没有重写 equals 还是比较的地址,查看object的源码
image.png
image.png
网友评论