String类详解——字符串比较

比较==与equals

==号的用法

  String s1 = new String("Hello Java"); //在堆空间创建对象
        String s2 = "Hello Java"; // 在常量池中创建
        System.out.println(s1 == s2); //fasle

注意==比较的是两个数组的地址。

  • 如果new的String,则会在堆空间创建对象

  • 如果是直接赋值,在常量池创建。

  • 两个String直接赋值结果?

 String s2 = "Hello Java"; // 在常量池中创建
        String s3 = "Hello Java";
        System.out.println(s2 == s3); //ture

从结果表明:如果直接赋值String的方式,创建的对象在常量池中,会从中查找是否有相同字符串,有则直接拿来。

       String s3 = "Hello " + "Java";
        String s4 = "Hello Java";
        System.out.println(s3==s4);//true

结论:用+号链接字符串时,编译会比较连接后的字符串。故结果true

   String s1 = "Hello Java"; //在堆空间创建对象
        String s4 = s2+"Java";
        System.out.println(s1 == s4);//fasle

结论:当有变量进行连接字符串时,相同字符串会在new一个,故为false

  String s1 = "Hello Java"; //在堆空间创建对象
        String s5 = s2.concat("Java");
        System.out.println(s1 == s5);//fasle

结论:当使用concat连接时,会new一个对象,故false

equals的用法

equals方法比较的是两个字符串的值。


        String s = "Hello";
        String s2  = "Hello";
        System.out.println(s == s2);//true

发布了33 篇原创文章 · 获赞 4 · 访问量 584

猜你喜欢

转载自blog.csdn.net/weixin_43287478/article/details/104637220