黑马程序员技术交流社区

标题: 字符串? [打印本页]

作者: 江远云    时间: 2012-3-14 12:30
标题: 字符串?
String s = ""这样也算定义了一个对象,虽然没有new啊,太特殊了。那String s = new String("abc")是两个对象,一个是"abc",一个是new,当调用这两个对象的求哈希值的方法时,"abc".hashCode(),new怎么调用方法,自己想的话new.hashCode(),那我再new,岂不同名,String s = new String("abc")一个对象是“abc”,还有一个对象是什么?
作者: 许圣建    时间: 2012-3-14 12:48
“abc”是编译时产生的字符串,存放在常量池中,你可以上网搜索String的详解,自己琢磨就算想通了你也不知道是不是真的那样
作者: wang耀雨    时间: 2012-3-14 13:14
String s = new String("abc")一共就定义了一个对象啊,new是用来创建对象的关键字啊,怎么可以说是对象呢,
String s = ""这样也算定义了一个对象,这是省略了关键字new呀,就跟数组一样,int[] arr={1,2,3}没有关键字一样可以创建对象,但是建议楼主不要把“省略”理解为没有,有时候形式上“省略”但实质上是存在的,希望能帮到楼主哦
作者: 于紫洋    时间: 2012-3-14 13:25
这经典问题怎么回事一个对象,两个啊,new String()一个“abc”一个
作者: 于紫洋    时间: 2012-3-14 13:36

String s = "" 字符串池建立对象,String特有的,没省略new这么一说,new String()是调用String的构造方法建立对象,这是两种方式
String s = ""执行的时候虚拟机会在字符串池中查看是否有""对象存在,如果有,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回
再举例
String a= "";
String b="";
这两句话执行以后只有一个对象 ""
很特殊,因为String确实是很特殊的,搞不懂就把这课多看一遍
作者: 于紫洋    时间: 2012-3-14 13:42
二楼言简意赅,分析到位。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2