点击上方蓝字可以关注我哦!
Object
类是所有 Java 类的根基类
如果在类的声明中未使用 extends
关键字指明其基类,则默认基类为 Object
类
public class Person {
...
}
等价于:
public class Person extends Object {
...
}
Object
类中定义有 public String toString()
方法,其返回值是 String 类型,描述当前对象的有关信息。
在进行 String
与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()
方法
Object
类中 toString
方法的源代码是:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
默认是打印:类名+哈希码(根据对象地址计算得出 )
可以根据需要在用户自定义类型中重写 toString()
方法。比如 String
类就重写了 toString
方法,源代码如下:
public String toString() {
return this;
}
Object
类中定义有:public boolean equals(Object obj)
方法 提供定义对象是否“相等”的逻辑。
Object
的 equals
方法 定义为:x.equals ( y ) 当 x 和 y 是同一个对象的应用时返回 true 否则返回 false
查看 Object
类中的 equals
方法源代码可以看出:
JDK 提供的一些类,如 String,Date 等,重写了 Object
的 equals
方法,调用这些类的 equals
方法, x.equals (y) ,当 x 和 y 所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象,意思就是并不一定是同一个对象的引用),返回 true 否则返回 false。
String
类的 equals
方法显然比较的是数组中的 char 值是否相等。
源代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
Java 的内存管理实际上指的就是对象的管理,其中包括对象空间的分配和释放。
使用 new 关键字创建对象即可
将对象赋值 null,即该对象没有引用指向时。垃圾回收器将负责回收所有”不可达”对象的内存空间。
c++ 的内存回收都需要自己手动的去释放,这样编写起来很让程序猿头疼。
Java 有垃圾回收机制,所以 Java 程序猿就不必要去太关注内存释放的问题。
把内存当作一个餐厅,每个顾客来吃饭,吃完饭直接就可以走,不需要去收拾桌子。有一个人会监控餐厅的桌子,发现顾客走了,桌子上没人,就会去把桌子收拾干净。这个人就是垃圾回收机制。
1、程序员无权调用垃圾回收器。
2、程序员可以通过 System.gc()。通知 GC 运行,但是 Java 规范并不能保证立刻运行。
3、finalize 方法,是 Java 提供给程序员用来释放对象或资源的方法,但是尽量少用。