String s = "123"; 我的理解是java 会先检查常量池中是否存在相同的字符串,如果找到的话,将s 指向现有的字符串对象。
那如果没有找到的话, 是不是应该会创建一个新的常量对象。
那是否可以说, String s = "123"; 在常量池中不存在 “123” 的时候, 会创建2个对象,一个 s 一个是 常量池中的 “123” 常量?
String s = "123"; 我的理解是java 会先检查常量池中是否存在相同的字符串,如果找到的话,将s 指向现有的字符串对象。
那如果没有找到的话, 是不是应该会创建一个新的常量对象。
那是否可以说, String s = "123"; 在常量池中不存在 “123” 的时候, 会创建2个对象,一个 s 一个是 常量池中的 “123” 常量?
[quote]那也就是说 句柄 s 不应该是一个被创建的对象?
“123” 如果没有的时候会创建常量对象了?[/quote]
理解正确!句柄(引用)和对象的内存区域都不一样。
顺便补充一点java内存知识:
句柄在栈中,对象实例在堆中。
类来自对现实世界的封装,实例来自非抽象类 是 类的 一个现实版本,能够体现类对
现实世界的封装,所以现实世界,环境不同对应的类会不同,那么这些类的对象对内存的需求不一样,因而对象实例不能在栈中创建。引用是确定的 ,编译时就知道它的大小。故在栈中。引用实际就是java中的指针,就是没有指针符号而已,指向被他引用的
对象。