java String字符串常量池中:引用类的比较
首先
只要是“”中的字符串都在字符串常量池中,
对于基本类型来说, = =是对于数值的比较;
而对于引用类型来说, = =是对于【地址值】的比较;
明确
1.“abc”类型的不是一种基本类型,已经默认构造了一个实例对象,即相当于new过,在堆中有地址,如下0x666,但是存储的位于常量池中。
2.而char数组的内容,一开始还没new,数组也是保存在堆当中,如下char【】,new之后会把char转换为byte数组。
3.故两者的地址不同,引用类型的==比较下,为不同
注意体会上图中堆的调用,即明确字符串常量即可。
String比较方法
public class Extends {
public static void main(String[] args) {
String s = “abc”;
char[] charArray = {‘a’,‘b’,‘c’};
String s1 = new String(charArray);
System.out.println(s1 == s);
System.out.println(s1.equals(s));//正确比较法
}
附加经验1:
假如常量与变量比较注意点:
把常量置前可以避免变量指针为空但仍然调用String类下的equals方法的错误。