一,equals方法
这里经常会有面试官会问“==”和“equals”的区别?通常的回答是“==”比较的是值而“equals”比较的是地址 。
准确来讲“==”可以判断基本类型和引用类型,在进行判断时要求两边的类型必须一致或兼容。当判断基本类型时比较两边的值是否相等,当判断引用类型时比较两边的地址是否相等。
“equals”是判断两个任意引用类型的地址是否相等,但是我们看到的String.equals("引用类型元素")却判断值是否相等。这是因为在String类中重写了"equals"方法:
二,toString方法
源码:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
返回的是当前类的类名和哈希值的16进制,当然我们可以在子类中重写该方法,并且在调用的时候不用写具体的调用语法,当前对象会自动调用该方法。
三,hashCode方法
如果当前对象调用此方法,会返回一个整数类型的特殊值(和调用对象的地址有关),有利于对象的存储。
四,finalize方法
垃圾回收方法,该方法可以唤醒系统中的GC(垃圾回收器)来进行无用对象空间的释放,命令
System.gc();
但是不一定唤醒就一定回收,当内存的可用空间比较充足时,GC的回收就比较佛性了。
五,static关键字
static 是静态的意思,一种修饰符,可以用来修饰类的成员,包括类的属性,方法,初始化块,内部类。静态成员随着类的加载一起加载,所以在类中可以直接调用其它静态成员;静态成员存储在方法区的静态域中并且只有一份,各个类对象之间共享;例如:现有一个Person类,其nation为静态属性,实例化两个对象并赋值,
class Person{ String name; static String nation; public String getName() { return name; } public void setName(String name) { this.name = name; } public static String getNation() { return nation; } public static void setNation(String nation) { Person.nation = nation; } public Person(String name,String nation) { super(); this.name = name; this.nation=nation; } public String toString(){ return name+"\t"+nation; } }
Person p1 = new Person("柳岩","中国"); System.out.println(p1); Person p2 = new Person("特朗普","美国"); System.out.println(p2); System.out.println(p1);
运行结果:
由此可以看出对象柳岩和特朗普共享了Person的静态nation属性。
内存图:
六,final关键字
final是最终的意思,就是不能改变。
当final修饰类时,该类就变成了“太监类”,不能被继承,一般跟static一起出现。
当final修饰方法时,该方法不能被重写,但可以继承。
当final修饰属性和变量时,一旦赋值就不能被改变。常量在声明时必须赋值,如果修饰引用类型,引用类型的地址不能改变,但值可以改变。
七,所有类的爸爸:object