《java基础》笔记--String类

我在学习《Java基础》String类是遇到以下的问题,希望能够帮助大家。

大家都知道==和equals()两种方式都能对字符进行比较,他们的区别之处就是:

1.equals()方法用于比较两个字符串中的字符是否相等;

2.==方法用于两个字符串对象的地址是否相同;

以下两种代码会让大家更加清楚了解其中的细节:

代码一:

public class E05{

     public static void main(String[] args){

           String s1 = "String";

String s2 = "String";

System.out.println("判断两个字符串是否相等"+s1.equals(s2));

System.out.println("判断两个字符串是否相等"+(s1==s2));//此处有疑问

}

}

代码一运行结果截图

 

 

代码二:

public class D5{

      public static void main(String[] args){

            String s1 = new String("abc");

            String s2 = new String("abc");

            System.out.println("判断两个字符串是否相等"+s1.equals(s2));

            System.out.println("判断两个字符串是否相等"+(s1==s2));//此处有疑问

      }

}

代码二运行结果截图

 

 

 

大家就会有疑问,为什么关于(==方法)代码一的运行结果与代码二的运行结果不一样呢?

答案:字符串“abc”和“new String('abc')”其实在内存中存储的形式是不同的。 字符串“abc”存放在常量区,String a ="abc'时,a指向的是常量区中“abc”字符串,String b= “abc”的时候,b指向的也是同一个字符串,所以a,b无论从内容还是内存地址指向的都是同一个,所以为true。 而使用String s1 = new String(“abc”)的时候,s1指向的并不是常量区中的“abc”,而是指向new String这个对象,new 出来的String 再指向 常量区中的“abc”,所以使用equals比较s1和s2的内容也就是值的时候是true,使用==比较s1和s2指向的内存地址的时候是false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值