java这段代码为什么输出结果是s=hello a=hello false false

2025-05-15 06:47:55
推荐回答(4个)
回答1:

s本身是"hello"
a是 "he" + "llo",所以也是hello
s==a是false,因为两个都是对象,虽然字符相同,但内存地址不同,所以输出false。字符串若比较字符的话要用equals

回答2:

对象不同,s、a、b只是一种指向对象的变量,即存的是对象所处内存的地址值
用== 比较,只是比较的地址值,因为对象不同,所以地址不同,所以a==s会输出FALSE,
如果改为s.equals(a),就是比较对象里的内容,这样才会输出true

回答3:

引用和引用的指是不一样的。s和a本身都只是引用

回答4:

首先,来分析 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.