1、String s =“abc”的定义首次在编译时要到内存中常量池中查询,如何存在的话,直接指向这个对象。产生这样的原因是String类是字符串常量,一旦被初始化,就会在常量池永久保存。而String s1 = new String ();则是在堆内存中重新开辟空间。检验代码如下图:
public class Demo2
{
public static void main(String[] args)
{
String s= "abcd";
String s1= "abcd";
String s2="abcd";
String s3=new String("abcd");
String s4=new String("abcd");
System.out.println("s==s1:---"+(s==s1));
System.out.println("s==s2:---"+(s==s2));
System.out.println("s1==s2:---"+(s1==s2));
System.out.println("s3==s4:---"+(s3==s4));
System.out.println("s1==s4:---"+(s1==s4));
System.out.println("s2==s4:---"+(s2==s4));
}
}
结果如下:
s==s1:---true
s==s2:---true
s1==s2:---true
s3==s4:---false
s1==s4:---false
s2==s4:---false
2、equals与==的区别:
equals在Object类中的作用和==是一样,比较类是否相等,但是,在继承过程中,部分类对equals()方法进行了重写。Stirng类是最为明显之一。equals()方法被重写为比较两个对象的内容。在其它类中,equal()方法与==依然一样。代码如下:
public class Demo2
{
public static void main(String[] args)
{
String s3=new String("abcd");
String s4=new String("abcd");
System.out.println("s3==s4:---"+(s3==s4));
System.out.println("s3.equals(s4):---"+(s3.equals(s4)));
}
}
结果如下:
s3==s4:---false
s3.equals(s4):---true
本文详细解释了Java中字符串常量池的使用,以及equals与==在比较字符串对象时的不同表现。
1835





