欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单

发布时间:2023/12/9 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

先来一道java面试题:
String s = new String(“zsx”);
问:创建了几个String Object?

先别往下看,想想答案
先上一个图:

如图所示,问题所示的语句创建了2个String对象和一个引用。
String s = new String(“zsx”);
相当于
String s1=”zsx”;
String s=new String(s1);
“zsx”作为一个常量字符串首先被创建,它被保存在“串池”中。
所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在”zsx”这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。(注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。)
然后,new String(“zsx”)也创建了一个对象,”zsx”作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的”zsx”内容一致!
前两步建立的对象都是保存在堆heap上的。
最后String s = new String(“zsx”); 所做的工作是:在栈stack中创建一个引用s,然后s指向上一步new出的对象所在地。结束。
我一直觉得String的内容简单的很,我早就掌握了。直到看到这题,我知道我以前真是too young,too naive。知其然而不知其所以然,谓之“菜鸟”也。
知道真相的我立马滚去学习,现将所获记录如下:

  • String的两种创建方式
  • String的常用方法
  • StringBuffer、StringBuilder
  • String与StringBuffer的对比
  • 自己实现String的一些常用方法
  • 2015/8/3 17:09添加:
    java里是没有运算符重载的,String+是StringBuffer的append()方法来实现的,如:

    请把下面的程序编译后再反编译:
    String a = “a”;
    String b = “b”;
    String c = a + b;
    String d = c + 1;
    得到的结果是:
    String a = “a”;
    String b = “b”;
    String c = (new StringBuilder(String.valueOf(a))).append(b).toString();
    String d = (new StringBuilder(String.valueOf(c))).append(1).toString();

    所以,重载的是 append() 方法。

    转载于:https://blog.51cto.com/13545923/2053483

    总结

    以上是生活随笔为你收集整理的Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。