《java基础》笔记--String类

版权声明:如需转载,必须在明显处加以说明,否则视为侵权 https://blog.csdn.net/STUDENTstudent123/article/details/82501761

我在学习《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。

猜你喜欢

转载自blog.csdn.net/STUDENTstudent123/article/details/82501761