Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单
2017-12-22 14:07
645 查看
先来一道java面试题:
String s = new String(“zsx”);
问:创建了几个String Object?
[b][b][b][b][b][b][b][b][b][b][b][b] 先别往下看,想想答案 [/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
先上一个图:
如图所示,问题所示的语句创建了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() 方法。
String s = new String(“zsx”);
问:创建了几个String Object?
[b][b][b][b][b][b][b][b][b][b][b][b] 先别往下看,想想答案 [/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
先上一个图:
如图所示,问题所示的语句创建了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() 方法。
相关文章推荐
- Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单
- Java基础查漏补缺:(String篇)一个面试题问倒了我,原来String并不简单
- Java基础查漏补缺:String为什么不可修改
- Java基础查漏补缺:String为什么不可修改
- Java基础复习:编写简单的String工具类
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- Java基础知识强化31:String类之String的面试题
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 循序渐进学java基础笔记(3)——一个简单的示例
- Java基础查漏补缺:final、finally和finalize的区别
- 利用java基础写的一个简单的小游戏,没有UI界面,只是涉及到类的封装,方法的调用,方便日后复习用
- 一个简单的SWT程序实例及详解-Java基础-Java-编程开发
- Java面试题多思路解析--有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
- Java基础查漏补缺
- Java基础查漏补缺:(开篇)为什么要在即将找工作的时候还在看Java基础
- 由一个简单的String c=a+b的Java问题引发一点想法 推荐
- 【Java基础】用LinkedList实现一个简单栈的功能
- 【JAVA基础】0012--------判断String类型的XML中是否存在某一个节点