java这段代码为什么输出结果是s=hello a=hello false false
publicclassTest{publicstaticvoidmain(String[]args){Strings="hello";Stringa="he";Strin...
public class Test{
public static void main(String []args){
String s="hello";
String a="he";
String b="llo";
int iBeg=0;
char iEnd=3;
a=a+b.substring(iBeg,iEnd);
System.out.println("s="+s+"\na="+a);
System.out.println(s==a);
System.err.println(s==a);
}
} 展开
public static void main(String []args){
String s="hello";
String a="he";
String b="llo";
int iBeg=0;
char iEnd=3;
a=a+b.substring(iBeg,iEnd);
System.out.println("s="+s+"\na="+a);
System.out.println(s==a);
System.err.println(s==a);
}
} 展开
5个回答
展开全部
s本身是"hello"
a是 "he" + "llo",所以也是hello
s==a是false,因为两个都是对象,虽然字符相同,但内存地址不同,所以输出false。字符串若比较字符的话要用equals
a是 "he" + "llo",所以也是hello
s==a是false,因为两个都是对象,虽然字符相同,但内存地址不同,所以输出false。字符串若比较字符的话要用equals
更多追问追答
追问
为什么iEnd是char类型程序却没有报错??还有iEnd=2的话最后的a为什么是等于hell??
追答
char和int是可以互相转换的,都是值类型
substring(beginIndex,length)
iEnd指定截取长度,"llo"截取2的的长度就是ll
所以是hell
展开全部
对象不同,s、a、b只是一种指向对象的变量,即存的是对象所处内存的地址值
用== 比较,只是比较的地址值,因为对象不同,所以地址不同,所以a==s会输出FALSE,
如果改为s.equals(a),就是比较对象里的内容,这样才会输出true
用== 比较,只是比较的地址值,因为对象不同,所以地址不同,所以a==s会输出FALSE,
如果改为s.equals(a),就是比较对象里的内容,这样才会输出true
追问
那int型变量用“==”就不是比较地址了?为什么??为什么iEnd是char类型程序却没有报错??还有iEnd=2的话最后的a为什么是等于hell??
追答
你要明白堆栈的这个东西,一般的变量是存在栈里的,像int、float、double等类型,还有就是对象这个类型了,在生成对象类型时会在堆里面创建一个空间,在这里面存储对象的内容,而栈里会保存对象的地址,就是s、a之类的,所以int类型可以直接==比较
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-06-05
展开全部
首先,来分析 a=a+b.substring(iBeg,iEnd);
虽然,iEnd是char类型的,但是传到substring方法后它会转成整型值为3.
b.substring(iBeg,iEnd) 返回的是b自己的引用 (因为开始到结束位置形成的字符串跟自己相同,具体可见substring的source code). 值依旧为"llo"
而执行到 a=a+b.substring(iBeg,iEnd);
a+b.substring(iBeg,iEnd) 会创建一个新的String对象,而a会引用这个新的对象,且值为"hello".
所以,虽然,s和a的值都是"hello", 但是引用是不同的,所以s==a 会返回false.
虽然,iEnd是char类型的,但是传到substring方法后它会转成整型值为3.
b.substring(iBeg,iEnd) 返回的是b自己的引用 (因为开始到结束位置形成的字符串跟自己相同,具体可见substring的source code). 值依旧为"llo"
而执行到 a=a+b.substring(iBeg,iEnd);
a+b.substring(iBeg,iEnd) 会创建一个新的String对象,而a会引用这个新的对象,且值为"hello".
所以,虽然,s和a的值都是"hello", 但是引用是不同的,所以s==a 会返回false.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串标比较不能用==,要用 s.equals(a)
追问
晕 我没报错 我是问结果为什么是那样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |