String str1 = ""; // 字符串长度为0 在堆中存在内容占用的 ,在字符串常量池中存在的对象 String str2 = null; String str3 = new String(); // 在堆空间中创建对象 String str11 = ""; String str22 = null; String str33 = new String(); System.out.println(str1 == str2); //false reason: str1是在字符串常量池中的""内存空间的地址值 System.out.println(str1 == str3); //false reason:str3是在堆空间中的地址值 System.out.println(str1 == str11); // true reason: 引用同一个常量池中地址 System.out.println(str1.equals(str2)); // false reason : str2 为null System.out.println(str1.equals(str3)); // TRUE reason: str1常量池中的地址 ,str2在堆中的地址 System.out.println(str1.equals(str11)); // TRUE reason: 常量池"" 的引用 System.out.println(str2 == str3); // FALSE reason: null != 堆空间地址值 System.out.println(str2 == str22); // TRUE reason: 同为null System.out.println(str2.equals(str22)); // NULLPointException System.out.println(str2.equals(str3)); // NULLPointException System.out.println(str3.equals(str2)); // FALSE reason: 源码equals()方法第一阶段判断 str2是否是str3的同一引用,第二阶段判断str2是否是String类型的子类或者String System.out.println(str3 == str33); // FALSE reason: 堆空间值相同但地址不同 System.out.println(str3.equals(str33)); // TRUE reason:比较的是 内容
01-27
4419
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交