zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Mysql----8 联表查询 嵌套查询 inner join on left join on right join on
    Mysql---7 where 条件语句
    Mysql---6 Select 查询数据的方式
    Mysql---5(DML) 外键constraint不推荐 表中数据的insert into values update set where delete from where truncate
    Mysql---4 修改表字段操作(增,删,改,重命名)
    Mysql ---3创建表
    小米r3g旧版开发版固件,安装opkg
    git clone
    2.使用vue ui命令快速构建应用
    动态加载css,js
  • 原文地址:https://www.cnblogs.com/hacket/p/3034011.html
Copyright © 2011-2022 走看看