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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hacker◊紫猫 中级黑马   /  2014-10-2 22:23  /  1907 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="abc";
s=="a"+"bc";求输出的对错
String s=new String ("abc"
);
s=="a"+"bc";求输出的对错

9 个回复

倒序浏览
false,true
回复 使用道具 举报
楼主 你要记住一点,只要是new出来的,都会在内存中开辟一个新空间,所以是false
回复 使用道具 举报
通过new创建字符串对象,相当于在堆内存中创建了两个对象
回复 使用道具 举报
第一个是true;
第二个是false;
回复 使用道具 举报
true,false
回复 使用道具 举报
第一个分析:算术运算符连接符“+”的优先级别高于比较运算符“==”,所以:先"a"+"bc"="abc",然后s=="abc",结果为true. 第二个分析:new一个s对象,同时构造函数传入参数"abc"进行初始化。但s对象在栈中记录的是一个地址值,所以一个地址值与一个字符串比较,结果为false.
回复 使用道具 举报
运行下试试不就知道了。
回复 使用道具 举报
weiyi 中级黑马 2014-10-8 11:56:07
9#
运行后发现是:true false
先看Api1.6版本的解释:
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。

参数:
original - 一个 String。
是不是可以这么理解:String s=new String ("abc"),"abc"是一个对象,s是"abc"对象的一个副本(相当于在内存中copy了一份,内容一样,地址是不一样的),也就是说s是另一个对象,s和"abc"不是同一个对象所以s=="abc"为false

以上是个人理解,求大师解惑
回复 使用道具 举报
true false,最主要原因就是new出来的都是新开辟的空间啊,true的原因是因为字符已经在里面直接用就行了,不管你是a+b+c,只要是一样的字符就可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马