==比较的是地址
equals()比较的是值
String类型两种创建方式
方式1不用new的方式将"abc"放在常量池中,两个对象s1和s2指向同一个常量池变量。为true。
方式2是new方式创建,引用在栈内,数据在堆内,所以为false。
public class Compare_string{
public static void main(String[] args){
// 都在栈里面true
int i=1;
int j=1;
System.out.println(i==j);//都在栈里面所以是true
// 使用new的方式定义,对象的引用在栈里面,数据在堆里面所以是false
Student st1=new Student();
Student st2=new Student();
System.out.println(st1==st2);
// string例外,都指向"abc"这同一个常量池变量,比较的是同一个地址
String s1="tes";
String s2="tes";
System.out.println(s1==s2);
String s3 = new String("rng");// "rng"存在了常量池里面
String s4 = new String("rng");
System.out.println(s3==s4);//比较地址值
System.out.println(s3.equals(s4));//比较值不比较地址
}
}