String zy1=new String("小朱"); String zy2=new String("小朱");建了几个对象?

简介: String zy1=new String("小朱"); String zy2=new String("小朱");建了几个对象?

提问下面每段代码建了几个对象

问题一

String zy1 = "小朱";
String zy2 = "小朱";

问题二

String zy1 = "小朱";
String zy2 = "大朱";

问题三

String zy1 = new String("小朱");
String zy2 = new String("小朱");

问题四

String zy1 = new String("小朱");
String zy2 = new String("大朱");

问题五

String z = "小";
String y = "朱";
String zy = z + y;

问题六

String zy = "小" + "朱";

解析

会不会有人连问题一都不知道,"这明明是常量,这肯定没有创建对象",哈哈是不是有好多小伙伴都这么认为。
JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
嘟噜嘟噜一大堆说什么什么东西我一句也没听懂,哈哈。我们换个思路,我们把问题一中的"小朱"理解成String zy = new String(new char[]{'小','朱'});为什么这么写看看String源码。

/** The value is used for character storage. */
private final char value[];

/** Cache the hash code for the string */
private int hash; // Default to 0

public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}

然后我们看问题一我们可以理解为

String zy = new String(new char[]{'小','朱'});
String zy1 = zy;
String zy2 = zy;

是不是恍然大悟,一眼就看出来只创建了一个对象。
那我们继续看问题二

String z = new String(new char[]{'小','朱'});
String y = new String(new char[]{'大','朱'});
String zy1 = z;
String zy2 = y";

两个对象

继续看问题三

String zy = new String(new char[]{'小','朱'});
String zy1 = new String(zy);
String zy2 = new String(zy);

三个对象

继续看问题四

String z = new String(new char[]{'小','朱'});
String y = new String(new char[]{'大','朱'});
String zy1 = new String(z);
String zy2 = new String(y);

四个对象

继续看问题五

String z1 = new String(new char[]{'小'});
String y1 = new String(new char[]{'朱'});
String zy1 = new String(new char[]{'小','朱'});
String z = z1;
String y = y1;
String zy = zy1;

这个有意思了,竟然建了3个对象,所以为什么不要做字符串。

继续看问题六,这个就没办法用我的那种理解了,因为他们先加在一起。所以就和String zy = "小朱";这就创建了一个对象。

总结

String的东西很多,一篇文章也讲不完,今天就简单介绍了下一些喜欢面试问到的内容,也是最近看到的一个有意思的东西,所以写了这篇文章,各位看官可有自己理解?

相关文章
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
5天前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
11天前
|
存储 Java 对象存储
String str="Hello" 与 String str=new String(“Hello”)一样吗?
String str="Hello" 与 String str=new String(“Hello”)一样吗?
|
1月前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
7月前
|
对象存储
String_s1_=_new_String(“abc“);这句话创建了几个字符串对象?
String_s1_=_new_String(“abc“);这句话创建了几个字符串对象?
|
4月前
|
前端开发 Java 测试技术
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
把List<对象>转变<String,List<对象>>形式,k为判断的值,v为k重复的数据。
22 0
|
8月前
|
Java 程序员 编译器
new String(“hello“)之后,到底创建了几个对象?
最近,有很多优秀的程序员从大厂毕业, 再加上大环境的影响,很多正在找工作的小伙伴也感觉技术面试越来越难,基本上都会问技术底层原理,甚至有些还会问到操作系统层面的知识。 如果技术功底不扎实,确实很难找到合适的岗位。
63 0
|
5月前
|
JSON Java 数据格式
Java jackson 由String转成List和各种对象
时间久了,会忘记具体怎么转,记录一下,后面方便使用
74 1
|
7月前
|
Java
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
|
8月前
|
Java 编译器
JVM执行引擎、对象实例化、String相关知识
执行引擎就是执行内存中的指令,将字节码指令解释/编译为对应平台上的本地机器指令,充当了将高级语言翻译为机器语言的使者。
44 0