String s = new String("xyz");创建了几个对象?

时间:2021-06-13 16:20:31

这个问题在一些java面试题中经常看到,也是对于初学者很容易糊涂的。下面我讲下我的理解。在网上搜索会发现很多人说答案是2个,但是我觉得2个的考虑是不够周全的,为什么呢?我们逐步分析:


首先,我们来谈谈java中创建对象的机制。
1、new Class():调用类的构造函数创建对象,是常用并且重要的方法。
2、调用Class类的newInstance(),该方法等同于new Class()。
3、String类特有的,使用如"字符串"的引号内包含文本的形式创建对象。

例如:String a="xyz";这行代码执行时,JVM会先在常量池中查询是否存在字符串"xyz",存在则a直接引用常量池中的"xyz",否则创建对应字符串对象,保存到常量池中,并让a指向它。如果再加上下面代码:String b="xyz";System.out.println(a==b);你会发现结果是true,因为a,b都是引用的常量池中的"xyz"。


OK,了解了java中创建对象的方法以后,来分析String s = new String("xyz");
String s:只是定义了一个String类型的变量s,不存在创建对象;
=:进行赋值,同样没有创建对象;
"xyz":关键来了,如果常量池中已经存在"xyz",那么这里像我们前面所说的,是不会再创建对象的,反之则会;
new String():调用构造函数创建String类对象,以"xyz"为参数。

综上,我认为,题中的代码应该是创建了1个或者2个对象。


各位有什么意见,欢迎留言,共同探讨!