A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 江远云 中级黑马   /  2012-3-14 12:30  /  1365 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = ""这样也算定义了一个对象,虽然没有new啊,太特殊了。那String s = new String("abc")是两个对象,一个是"abc",一个是new,当调用这两个对象的求哈希值的方法时,"abc".hashCode(),new怎么调用方法,自己想的话new.hashCode(),那我再new,岂不同名,String s = new String("abc")一个对象是“abc”,还有一个对象是什么?

5 个回复

倒序浏览
“abc”是编译时产生的字符串,存放在常量池中,你可以上网搜索String的详解,自己琢磨就算想通了你也不知道是不是真的那样
回复 使用道具 举报
String s = new String("abc")一共就定义了一个对象啊,new是用来创建对象的关键字啊,怎么可以说是对象呢,
String s = ""这样也算定义了一个对象,这是省略了关键字new呀,就跟数组一样,int[] arr={1,2,3}没有关键字一样可以创建对象,但是建议楼主不要把“省略”理解为没有,有时候形式上“省略”但实质上是存在的,希望能帮到楼主哦
回复 使用道具 举报
这经典问题怎么回事一个对象,两个啊,new String()一个“abc”一个
回复 使用道具 举报

String s = "" 字符串池建立对象,String特有的,没省略new这么一说,new String()是调用String的构造方法建立对象,这是两种方式
String s = ""执行的时候虚拟机会在字符串池中查看是否有""对象存在,如果有,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回
再举例
String a= "";
String b="";
这两句话执行以后只有一个对象 ""
很特殊,因为String确实是很特殊的,搞不懂就把这课多看一遍
回复 使用道具 举报
二楼言简意赅,分析到位。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马