String s1="haha";在字符串常量池中建立一个内容为hahad的对象,s1指向该地址
String s2="haha";字符串中常量池已经有一个内容为hahad的对象,不在建立新的对象,s2指向该地址
String s3="ha"+"ha";两个字符串合并成一个新的字符串,在字符串常量池中已有,不再创建,s3同上
所以,s1,s2,s3指向了同一个对象
b0==b1,在调用changeBook1方法的时候,传进去的是第一个对象的地址值,在该对象身上进行了赋值操作,再把该对象的地址值赋给了b1,虽然对象内容改变了,但地址值没变。
b0==b2,在changeBook2中,虽然传入了第一个对象的地址值,但新建了一个对象后覆盖了该地址值(被调用的函数内的形参改变了,调用者的实参没有改变),这样就是在新的对象上进行操作,最后把新对象的地址值赋给了b2,这样b2和b0指向了不同的对象。 |