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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小蚊子 中级黑马   /  2013-12-14 23:54  /  1697 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = new String("abc");   String s1 = "abc"; 为什么s==s1是false     地址值不都是指向abc的么

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

4 个回复

倒序浏览
String s = new String("abc");   String s1 = "abc"; 为什么s==s1是false     地址值不都是指向abc的么
s是引用型变量,指向的是一个String对象 第一句话建立了2个对象 指向对内存中得String对象 堆内存中得String拿到的是"abc"这个字符串对象的地址值 ,而第二句话直接指向常量池中得"abc" 指向不一样  引用型变量==号是比较的地址值所以是false  希望对你有所帮助

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 唐侠君 于 2013-12-15 00:59 编辑

s==s1这种写法返回的结果比较的是地址值;你如果返回的结果比较的是String类中的参数内容就为true了。
String s = new String("abc");   创建了一个String对象s,并输入参数为“abc”;
String s1 = "abc"; 其实应该理解为String s1= new String("abc");   所以创建了两个对象s 和 s1,堆内存中就对应两个不同的地址值,所以结果为false。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。   
String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
回复 使用道具 举报
come on ............
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马