本文共 1140 字,大约阅读时间需要 3 分钟。
下面是自己根据自己归纳的,仅供参考,如果想看详细的请点击超级链接:
1、"=="和equals方法究竟有什么区别?
== 操作符是专门来比较变量的内存地址是否相等而不是对象本身,而equals是比较对象的内容。不过要注意的是,如果你要看清楚该类的equals方法底层是否也用了==操作符,不要想当然。
2、final关键字
final关键字,都知道如果修饰变量,该变量不能被修改,也就是不能改变,但是由于对象型变量的本质是"引用",使得"不变"也有了两种含义:引用本身的不变,和引用指向的对象不变。
例子:
引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!");//编译通过
可见,final只对引用的"值"有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的"值"相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。
** final只对引用变量的内存地址有约束力,对其对象内容的变化不具有约束力,这点类似于==操作符 **
3、 对于String s = "Hello World!"的理解
这个语句生命的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向“Hello World!” 这个String类型的对象
** 我们只是声明了一个只能指向String对象的引用变量所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
4、string到底变了没有
没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码:
String s = "Hello";
s = s + " world!";
string的内容并没有改变,而是在内存中重新开辟了一个位置存放Hello World然后将s指向新的内容,所以不是内容变化了,而是s不在指向原来的那个对象了,而是指向了另一个String对象。
转载地址:http://nsupi.baihongyu.com/