String str = new String("abc");
String str2 = "abc";
第一个问题:第一种写法是否创建了两个对象?如果是,那么创建了哪两个对象?对象存放在堆中,声明的这个str存放在哪里,是堆中还是栈中?
第二个问题:第二种写法中的值“abc”是否存放在栈中?如果是,那么为什么都说栈中只能存放基本数据类型,可String 确是一个类?
String str2 = "abc";
第一个问题:第一种写法是否创建了两个对象?如果是,那么创建了哪两个对象?对象存放在堆中,声明的这个str存放在哪里,是堆中还是栈中?
第二个问题:第二种写法中的值“abc”是否存放在栈中?如果是,那么为什么都说栈中只能存放基本数据类型,可String 确是一个类?
这样的数据类型系统可以轻松的在栈里面处理。
■□■□■□■□■□■□■□■
□ □
■ 忍以明志 勤以致远 ■
□ □
■□■□■□■□■□■□■□■
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
String str2 = "abc";
第一个问题:第一种写法是否创建了两个对象?如果是,那么创建了哪两个对象?对象存放在堆中,声明的这个str存放在哪里,是堆中还是栈中?
第二个问题:第二种写法中的值“abc”是否存放在栈中?如果是,那么为什么都说栈中只能存放基本数据类型,可String 确是一个类?No1.第一种写法只创建了一个对象,"abc"存放在栈中,指向它的引用地址存放在堆中.
No2.是;因为"abc"只是所谓的值,对于底层来说,只是拼起来的数字,所以依然是基本数据类型,对于它的引用地址才会放在堆中.
创建了2个对象,一个对象在栈中,一个对象在堆中,str变量在堆中
第二个问题:
只创建一个对象,该对象在栈中。
通常new的对象是放在堆中的,元类型是放在栈中的。但是由于String是java中最经常使用的类(注意没有之一),所以设计者把这个类设计为final class,而且这个类也很特别。
String str2 = "abc"; 没有创建对象,str2中的对象在String池里有了,直接用,所以一共创建了2个对象!