package String;
public class Demo1 {
public static void main(String[] args){
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println("str1==str2:"+(str1==str2)); //true
System.out.println("str2==str3:"+(str2==str3)); //false
System.out.println("str3==str4:"+(str3==str4)); //false
System.out.println("str3.equals(str4):"+str3.equals(str4)); //true
//是String类重写了Object类的equals方法,比较的是两个字符串对象的内容是否一致
//"=="用于比较引用数据类型数据的时候比较的是两个对象的内存地址
//equals方法默认比较也是两个对象的内存地址,默认情况下是内存地址,但是字符串类可以对equals方法重写,比较的是内容是否一致
}
public static void test(String s){
//可能会出现test(null)空指针异常:传入的实参s为空
if("中国".equals(s)){ //s.equals("中国"):不可行。 解决办法:可以把“中国”和str位置调换一下。
System.out.println("回答正确");
}else {
System.out.println("回答错误");
}
}
}
"=="用于比较引用数据类型数据的时候比较的是两个对象的内存地址
equals方法默认比较也是两个对象的内存地址(默认情况下是内存地址,但是字符串类可以对equals方法重写),是String类重写了Object类的equals方法,比较的是两个字符串对象的内容是否一致。
字符串常量池:在方法区内部
见下图:
笔试题目:new String(“abc”)创建了几个对象?
两个对象,一个对象是位于字符串常量池中,一个对象是位于堆内存中。
//小技巧:把常量作为调用者。
public static void test(String str){
//可能会出现test(null)空指针异常
if("中国".equals(str)){//解决办法:可以把“中国”和str位置调换一下。
System.out.println("回答正确");
}else{
System.out.println("回答错误");
}
}