• String常见面试题及与StringBuffer区别


     1 public class StringDemo
     2 {
     3     public static void main(String[] args)
     4     {
     5         String s1 = "abc";
     6         String s2 = "abc";
     7         sop("s1==s2: "+(s1==s2));//true
     8         sop("==============");
     9         /*
    10             1.这里的结果是true. 由于字符串是常量(内存中创建对象后不能修改), 而且字符串在程序中经常使用. 
    11             所以Java对其提供了缓冲区. 缓冲区内的字符串会被共享. 
    12             使用双引号的形式定义字符串常量就是存储在缓冲区中的. 
    13             使用"abc"时会先在缓冲区中查找是否存在此字符串, 没有就创建一个, 有则直接使用. 
    14             第一次使用"abc"时会在缓冲区中创建, 第二次则是直接引用之前创建好的了.
    15         */
    16         String s3 = "de";
    17         String s4 = "abcef";
    18         String s5 = s1+s3;
    19         sop("s4==s5: "+(s4==s5));//false
    20         sop("==============");
    21         /*
    22             2.这里的结果是false. Java中字符串的相加其内部是使用StringBuilder类的append()方法和toString()方法
    23               来实现的. 而StringBuilder类toString()方法返回的字符串是通过构造函数创建的.
    24         */
    25 
    26         String s6 = new String("abc");
    27         String s7 = new String("abc");
    28         sop("s6==s7: "+(s6==s7));//false
    29         sop("==============");
    30         /*
    31             3.这里的结果是false. 使用构造函数创建的字符串都是在缓冲区外面创建一个新的.
    32             所以只要是使用构造函数创建的字符串, 和任何字符串都不会相等.
    33         */
    34         
    35         String s8 = "xyz";
    36         String s9 = "xy"+"z";
    37         sop("s8==s9: "+(s8==s9));//true
    38         sop("==============");
    39         /*
    40             4.这里的结果是true. 其实这里的s2并没有进行字符串相加, 两个双引号形式的字符串常量相加, 
    41               在编译的时候直接会被转为一个字符串"abc".
    42         */
    43 
    44         String str = "abc";
    45         str.substring(3);
    46         str.concat("123");
    47         sop(str);//abc
    48         sop("==============");
    49         /*
    50             5.这里结果是"abc". 由于字符串是常量(内存中创建对象后不能修改), 该类中所有方法都不会改变字符串的值. 如果希望使用一个可变的字符串, 可以使用StringBuilder或StringBuffer类.
    51         */
    52 
    53         /*
    54         String和StringBuffer有什么区别?
    55         JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
    56         这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。
    57         当你知道字符数据要改变的时候你就可以使用StringBuffer。
    58         */
    59 
    60     }
    61     public static void sop(Object obj)
    62     {
    63         System.out.println(obj);
    64     }
    65 }
  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/hacket/p/3034011.html
Copyright © 2020-2023  润新知