Java 中 字符串比较原理(指针 或 字符)
2020年11月16日 15:57:53
在java中 我们对比一个字符串 他是有分几种情况 :
如下:
import java.util.*; public class Main { public static void main(String[] args) { String str = "aabbccdda"; String str1 = new String("aabbccdda"); System.out.println((str == str1)); //false String str3 = "aabbccdda"; String str4 = "aabbccdda"; System.out.print((str3 == str4)); //true } }
可以看出 它new出来的东西 是在堆中的 ,但是 它 常亮(str1)定义出来的东西 JVM会在常量区中寻找,若没有,则创建, 又让 str3 和 str4 去指向"aabbccdda",JVM会在常量区寻找,有的话直接指向
故str3 和 str4 相等判断后得出 是相同的。
str 和 str1 内容相同又怎样,但它们内存中存放的区域不一样 那地址也是不一样的,所以说,他们是不相等的。
总结出来 : 他们的比较是用指针(地址) 来对比的,若你是想去单纯的对比字符串(即内容相同就相等) 那么你可以用 字符串的特性 str.equals() 或 循环字符比较。
这里注意一下 直接String = “xxx” 和 new 出来的方式是不一样的 需要严格去了解