Java String、 StringBuffer 和 Stri

2020-09-04  本文已影响0人  有梦想的狼

String类

字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串。

String类的常见面试问题

  1. 以下打印结果为:
    String s1 = "abc";           
    String s2 = new String("abc");     
    System.out.println(s1==s2);       
    System.out.println(s1.equals(s2));
    
    打印结果:
    false
    true
    
    因为s1是字符串字面量,在常量池中,而s2是通过new创建的,在堆中,所以s1和s2地址不同,但是内容相同。
  2. 以下打印结果为:
    String s1= "a" + "b" + "c";
    String s2= "abc";
    System.out.println(s1==s2);
    System.out.println(s1.equals(s2));
    
    打印结果:
    true
    true
    
    因为s1和s2都是字符串字面量,在常量池中。
  3. 以下打印结果为:
    String s1 = "ab";
    String s2 = "abc";
    String s3 = s1 + "c";
    System.out.println(s3==s2);        
    System.out.println(s3.equals(s2));
    
    打印结果:
    false
    true
    
    先在常量池中创建 ab ,地址指向 s1, 再创建 abc ,指向 s2。对于 s3,先创建StringBuilder(或 StringBuffer)对象,通过 append 连接得到 abc ,再调用 toString() 转换得到的地址指向 s3。故 (s3==s2) 为 false。

StringBuffer类

字符串变量。在进行字符串操作时,不会返回新的字符串常量。
它的方法都加了synchronized关键字,所以它是线程安全的。

StringBuilder类

字符串变量。在进行字符串操作时,不会返回新的字符串常量。
非线程安全,性能上优于StringBuffer

使用基本原则:

上一篇 下一篇

猜你喜欢

热点阅读