Sting-- "equals" and "=="

(1)“==” 用于比较基本数据类型时比较的是值,用于比较引用类型时比较的是引用指向的地址。
(2)Object 中的equals() 与 “==” 的作用相同,但String类重写了equals()方法,比较的是对象中的内容。

String创建的两种方式

String s1="aaa",在常量池获取对象,如果存在则直接引用

String s2=new String("aaa"); 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 对象)

1 String s1="aaa";
2 String s2=new String("aaa");
3 System.out.println(s1==s2); #flase
4 System.out.println(s1.equals(s2));  #true

     String类型的常量池比较特殊。它的主要使用方法有两种:

(1)直接使用双引号声明出来的String对象会直接存储在常量池中。
(2)如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用

        String s1 = new String("AAA"); #堆
        String s2 = s1.intern();          #常量池
        String s3 = "AAA";                 #常量池
        System.out.println(s2);//AAA   
        System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,
        System.out.println(s2 == s3);//true, s1,s2指向常量池中的”AAA“

字符串拼接:

        String s1="a";
        String s2="b";
        String c=s1+s2;
        String d="a"+"b";
        String f="ab";
        System.out.println(c==d);
        System.out.println(d==f);
posted @ 2020-09-08 11:04  lzk_seven  阅读(111)  评论(0编辑  收藏  举报