1.关系操作符 == 与 equals区别
- == 在基本数据类型中,==比较的是变量的值 注意:当声明的是基本数据类型的变量,即变量名及其值存放在堆内存中
- == 在引用变量类型中,变量存储的并不是值,而是堆中的地址,因此对比的是地址
- equlas 不能作用于基本数据类型,在没有重写的情况下,比较的是是否是同一个对象,而在String中进行了重写比较的是内容content
public static void main(String[] args) {
int x1 = 1;
int x2 = 1;
System.out.println("基本数据类型==比较: " + (x1 == x2)); // true
String s1 = new String("123");
String s2 = new String("123");
System.out.println("引用数据类型==比较: "+ (s1 == s2)); // false
String s3 = s1;
System.out.println("引用类型==比较: "+ (s1 == s3)); // true 返回true代表引用的是同一个对象
System.out.println("引用类型equelas :" + s1.equals(s2)); // true
}
2.hashCode == 与 equals关系
1.如果两个对象相同(即用equals比较返回true),那么他们的hashCode值一定相同;
2.如果两个对象的hashCode相同,那么equals可能不同;
由于提高了程序效率才实现了hashCode方法,先进行了hashcode的比较。如果不同,那么久没必要进行equals比较了,这样就大大的减少了hashCode的比较次数;
3.介绍final、finally、finalize()
final
1.作用于类,类不能被继承,因此final类的成员方法没有机会被覆盖;一般作用于没有子类,类的实现细节不允许被改变,并且确信这个类不会被扩展,就可以设计成final
2.作用于方法:如果类不允许子类覆盖某个方法,那么可以设置成final,使用final时,编译器会转入内嵌机制,可以提高程序的效率。
3.作用于成员变量:值一旦给定就无法改变,可以先定义final变量,在使用前必须初始化。
finally
1.finally是关键字,在异常处理中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally可有可无,但finally子句不管是否发生异常都会执行。一般用于关闭某些流操作。
finalize()
1.他是Objec中的方法,可以使用它在垃圾收集器将对象从内存中清楚出去之前做必要的清理工作,这个方法由垃圾收集器在确定这个对象没有被引用时调用