zoukankan      html  css  js  c++  java
  • java面试题中常见的关于String类问题总结

    问题1:

    String s1 = “abc”;
    String s2 = “abc”;
    System.out.println(s1 == s2);

    这里的结果是true. 由于字符串是常量(内存中创建对象后不能修改), 而且字符串在程序中经常使用. 所以Java对其提供了缓冲区. 缓冲区内的字符串会被共享. 使用双引号的形式定义字符串常量就是存储在缓冲区中的. 使用”abc”时会先在缓冲区中查找是否存在此字符串, 没有就创建一个, 有则直接使用. 第一次使用”abc”时会在缓冲区中创建, 第二次则是直接引用之前创建好的了.

    问题2:

    String s1 = new String(“abc”);
    String s2 = new String(“abc”);
    System.out.println(s1 == s2);

    这里的结果是false. 使用构造函数创建的字符串都是在缓冲区外面创建一个新的. 所以只要是使用构造函数创建的字符串, 和任何字符串都不会相等.

    问题3:

    String s1 = “abc”;
    String s2 = “a”;
    String s3 = “bc”;
    String s4 = s2 + s3;
    System.out.println(s1 == s4);

    这里的结果是false. Java中字符串的相加其内部是使用StringBuilder类的append()方法和toString()方法来实现的. 而StringBuilder类toString()方法返回的字符串是通过构造函数创建的.

    问题4:

    String s1 = “abc”;
    String s2 = “a” + “bc”;
    System.out.println(s1 == s2);

    这里的结果是true. 其实这里的s2并没有进行字符串相加, 两个双引号形式的字符串常量相加, 在编译的时候直接会被转为一个字符串”abc”.

    问题5:

    String str = “abc”;
    str.substring(3);
    str.concat(“123″);
    System.out.println(str);           

    这里结果是”abc”. 由于字符串是常量(内存中创建对象后不能修改), 该类中所有方法都不会改变字符串的值. 如果希望使用一个可变的字符串, 可以使用StringBuilder或StringBuffer类.

    本文链接:http://www.jfox.info/java-mian-shi-ti-zhong-chang-jian-de-guan-yu-string-lei-wen-ti-zong-jie, 转载请保留.
  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/wuxiang/p/3541325.html
Copyright © 2011-2022 走看看