Java

String中“==”和“equals”区别

2020-12-04  本文已影响0人  码农修行之路

注意1中,举例说明一下:

String str1 = "aa";
String str2 = "aa";

str1 = str1.concat("bb");
str2 = str2.concat("bb");

结果:str1 == str2 --->fasle

str1 = str1.replace("a", "b");
str2 = str2.replace("a", "b");

结果:str1 == str2 --->fasle
解惑:为什么str1 不等等与 str2,是因为在concat 或者 replace后,引用str1 和 str2的被重新赋值,该值是通过new String(str)得到的新的对象,所以说指向的对象变啦!这也就是说原来的对象还存在堆内存没有变,只是现有的心的对象和之前的对象已经不是同一个了

注意2中,举例说明一下,我们通过反射获取到String中的value字段,并改变value的属性,接着获取对象value上面的值,最后改变value所引用的数组中的字符

// 获取String类中的value字段
Field valueField = String.class.getDeclaredField("value");
// 改变value属性的访问权限
valueField.setAccessible(true);
// 获取str对象上value属性的值
Char[] value = (Char[]) valueField.get(str);
// 改变value所引用的数组中的字符
value[2] = 'hgz';

最后打印内存地址和值,会发现内存地址相同,值却被修改了

上一篇 下一篇

猜你喜欢

热点阅读