String s 与String s1 = new String();的本质区别及==与equals的区别。

本文详细解释了Java中字符串常量池的使用,以及equals与==在比较字符串对象时的不同表现。

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


评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值