解决方案 »
- spring与hibernate整合,当手动抛出runtimeException时,spring无论如何都不能让事务回滚,请前辈指教
- 两个ResultSet对象分别读取不同表数据
- 求完整的java打砖块游戏代码
- Log4j 日志丢失问题,急急急..................
- TONGWEB+JSP+ORACLE环境,ORACLE双网卡,连接不稳定,请教:
- el语句抱报错
- struts1.x和struts2稳定性怎么样啊
- weblgoic 8.1 的问题
- soap接口请求返回 Read timed out和Connection reset
- 如何使用quartz?急!
- spring的controller和servle有关系吗?
- 页面导出Excel问题
String s=new String("123") 创建两个对象,首先new String()的参数是String对象,创建“123”放入常量池,然后在new一个对象放入堆中
常量池里的数据不能称之为对象
常量池中包含多种类型,包括java基本数据类型、对象型(如:String)、等等。具体可搜索下常量类型表
常量池里的数据不能称之为对象
常量池中包含多种类型,包括java基本数据类型、对象型(如:String)、等等。具体可搜索下常量类型表常量池只是一种说法,在JVM规范里就是class的一部分,在实现上就是方法区里的一个内存块,何来的对象一说?对象是对堆里数据结构的一种抽象描述,方法区里没有这种描述
String s = "123";这种方式创建的字符串,"123"放在栈中,而只要是用new的方式创建的东西都是放在堆中。所以我认为String s="123"没有创建对象,而String s = new String("123"); 是创建了对象的。而且因为new是强制创建对象,所以肯定创建了1个对象。
我对这个问题也一直没研究透,大家讨论下~如果说的不对还请指正!
其实 String s="123" 和 String s=new String("123") 区别,学java的人大多数都能知道两个s不等。
只要自己理解通了,具体解释,就不那么重要了。不用过分争执对象,常量池,堆栈的概念。
有说法是:拷贝的一份,放到了堆里;还有说法是,new的对象,他的内容就是,对栈里对象“123”的一个引用
各种角度,各种解释........
其实 String s="123" 和 String s=new String("123") 区别,学java的人大多数都能知道两个s不等。
只要自己理解通了,具体解释,就不那么重要了。不用过分争执对象,常量池,堆栈的概念。
可是有面试官,在问过==,equals之后;就问了, String s="123" 和 String s=new String("123") 区别有什么区别?
然后答了一些看法,面试官说,你这基础比较差劲.........
常量池里的数据不能称之为对象
常量池中包含多种类型,包括java基本数据类型、对象型(如:String)、等等。具体可搜索下常量类型表常量池只是一种说法,在JVM规范里就是class的一部分,在实现上就是方法区里的一个内存块,何来的对象一说?对象是对堆里数据结构的一种抽象描述,方法区里没有这种描述
这个常量池,如果涉及到是jvm虚拟机概念的,进而认为是constant_pool那这个问题就飘起来了;
我们可不可以这样认为:提到的常量池是内存中保存,“常量”的一个区域。就是物理实体,而不是虚拟机概念上的常量池。
也许是;之前我也觉得,用,是关键,可是慢慢发现,虽然很多东西,一直在用,但是就是熟练了一些,没有实质上的长进,如果想在这个行业立足还是要知根知底一些,不然很容易被取代,淘汰;看到一些30多岁的人,找工作很难,实在有点寒心啊
面试官的问题确实问的没水平。我看的第二版的,当时重点想看类加载顺序,双亲委派那个东东的。然后看class解析什么的,就全蒙了,书先放那里,后面再看。
难道是先new一个空的String对象,然后再创建一个123的String对象,然后让前一个对象指向123?
另外,关于==和equals,存在栈里的可以用==,存在堆里的用equals。
难道是先new一个空的String对象,然后再创建一个123的String对象,然后让前一个对象指向123?
另外,关于==和equals,存在栈里的可以用==,存在堆里的用equals。不对。String s是构建一个引用
new String是在堆里开辟一块内存创建一个对象,这个对象里放的内容是123,这个123是从常量池里读取数据,然后拷贝一份放进新的对象里==和equals可以对任意对象使用,默认情况下==和equals是等价的,Object里的默认实现就是==
public boolean equals(Object obj) {
return (this == obj);
}
2.堆代码区,栈、堆、静态变量区s引用在栈
new 在堆