请问下面这段代码为什么第一个是 false第二个是true?(java)

2025-05-11 04:29:55
推荐回答(5个)
回答1:

第一个为整型 a 一开始为10,b=a = 10;然后a++;a变成11了。 10 == 11 不成立,为false。
之所以 b不随着a发生改变,这是因为b是一个新的实例,也就是b和a都有自己的地盘,两者不影响。

而第二个,就不同了。StringBuilder在赋值的时候,是不会创建新的实例的, sb2 = sb1 这也就意味着,sb1 和sb2 拥有同一个地盘,当sb1 发生变化时,sb2也会发生相同的变化,因为两者代表同一个东西。

所以,最后结果为 true。

回答2:

因为StringBuilder继承AbstractStringBuilder
其中append(String s)方法实际调用的是父类中public AbstractStringBuilder append(String s)方法相关实现如下:
public StringBuilder append(String s)
{
super.append(s);
return this;
}
public AbstractStringBuilder append(String s)
{
if(s == null)
s = "null";
int i = s.length();
if(i == 0)
return this;
int j = count + i;
if(j > value.length)
expandCapacity(j);
s.getChars(0, i, value, count);
count = j;
return this;
}

该方法未生成新的实例。

回答3:

a++后a=2 false
StringBuilder 是可变长的对象,操作的是自己,建议你看看这个http://zhidao.baidu.com/question/240364840.html

回答4:

a和b是两个不同的对象,在存储时是分开的;而对于stringbuilder类而言,在内存中其实两个共用一个存储空间的 。另外在比较的时候使用”==“比的不是它的值,如果比的是值,应该用a.equals()函数。

回答5:

第一个中a++调用的其实是int的方法,而不是Integer对象的,所以对引用b没影响!
而第二个中sb1加一个,sb2是sb1的一个引用,自然也跟着加了!