请问String a = "test";后堆中和常量池是不是都产生和test相关的东西啊
5个回答
展开全部
System.out.println(("test" instanceof String));
// true
用instanceof验证 "test" 是一个String对象
String str1 = "test";
String str2 = "test";
System.out.println(str1==str2);
//true
"=="运算符比较的是对象的引用是否相同,也就是指向的内存地址是否相同。
可以看出,str1 和 str2 指向同一内存,也就是系统默认的至创建了一个"test",而str1 和str2 都是这一内存的引用,而且引用类型是String。
通过 new 构造方法() 这种方法指定创建的对象是系统在堆区中开辟一个的空间,来存放对象的数据。这个是大家所公认的。
有一种说法 "test" 是系统自动的在常量池生成对象的数据,引用指向的也是常量池中的这个地址。如果再调用"test" 赋值,就直接把这个引用传递给对象。
至于在堆中存在什么东西,我目前还不会通过方法验证。我的理解就是不用new就和堆区不发生关系。
其实java的底层一般对程序员透明的,我们不必去深究。知道区别使用就好了。
// true
用instanceof验证 "test" 是一个String对象
String str1 = "test";
String str2 = "test";
System.out.println(str1==str2);
//true
"=="运算符比较的是对象的引用是否相同,也就是指向的内存地址是否相同。
可以看出,str1 和 str2 指向同一内存,也就是系统默认的至创建了一个"test",而str1 和str2 都是这一内存的引用,而且引用类型是String。
通过 new 构造方法() 这种方法指定创建的对象是系统在堆区中开辟一个的空间,来存放对象的数据。这个是大家所公认的。
有一种说法 "test" 是系统自动的在常量池生成对象的数据,引用指向的也是常量池中的这个地址。如果再调用"test" 赋值,就直接把这个引用传递给对象。
至于在堆中存在什么东西,我目前还不会通过方法验证。我的理解就是不用new就和堆区不发生关系。
其实java的底层一般对程序员透明的,我们不必去深究。知道区别使用就好了。
展开全部
呃,还是针对问题回答好点吧。
1.test字符串是在常量池是吗?回答:是
2.堆中有什么东西记录和test相关呢?回答:就是a了,堆中有一个内存装有a,a其实是对常量池中的"test"的引用,也就是说,a中装的是常量池中"test"这个对象的内存地址。
=====================================================================
说个题外话,String a=new String ("test");
如果这样的话,那么堆中装的是一个对象而不是一个引用了,a直接装着test字符创,而不是对常量池"test"中的一个引用了。
1.test字符串是在常量池是吗?回答:是
2.堆中有什么东西记录和test相关呢?回答:就是a了,堆中有一个内存装有a,a其实是对常量池中的"test"的引用,也就是说,a中装的是常量池中"test"这个对象的内存地址。
=====================================================================
说个题外话,String a=new String ("test");
如果这样的话,那么堆中装的是一个对象而不是一个引用了,a直接装着test字符创,而不是对常量池"test"中的一个引用了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用你当前方式声明的字符串,java虚拟机会自动的把
“test”记录在字符串常量池中。堆中记录的只是这个“test”
的引用。即一个地址。
“test”记录在字符串常量池中。堆中记录的只是这个“test”
的引用。即一个地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
test是对象 , a是对象的引用
跟User a=new User();一样,
跟User a=new User();一样,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习中.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询