java.lang.Object类
-
java.lang.Object类是所有 Java 类的根父类
-
如果在类的声明中未使用 extends 关键字指明其父类,则默认父类为 java.lang.Object 类
-
Object类中功能(属性、方法)具有通用性
属性:无
方法:equals() , toString() , getClass() , hashCode() , clone() , finalize() , wait() , notify() , notifyAll()
-
Object类只声明了一个空参的构造器
一、equals( )
面试题:== 和 equals( )的区别
== :运算符
-
可以使用在基本数据类型变量和引用数据类型变量中
-
如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
-
== 符号使用时,必须保证符号左右两边的变量类型一致
equals( ):一个方法,而非运算符
-
指示其他某个对象是否与此对象 “相等”
-
只能适用于引用数据类型
-
Object 类中 equals( ) 的定义:
public boolean equals (Object obj) { return (this == obj); }
说明:Object 类中定义的 equals( ) 和 == 的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
-
像 String 、 Date 、 File 、 包装类等都重写了 Object 类中 equals( ) 方法。重写以后,比较的不是两个引用地址是否相同,而是比较两个对象的 ”实体内容“ 是否相同
重写 equals( ) 方法
通常情况下,我们自定义的类如果使用 equals( ) 的话,也通常是比较两个对象的 “实体内容” 是否相同。那么我们就需要对 Object 类中的 equals( ) 方法进行重写
String中重写的 equals ( ) 方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
二、toString( )
-
当我们输出一个对象的引用时,实际上就是调用当前对象的 toString( ) 方法
-
Object 类中 toString( ) 方法的定义:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
-
像 String 、 Date 、 File 、 包装类等都重写了 Object 类中的 toString( ) 方法,使得在调用对象的 toString( ) 方法时,返回 “实体内容” 信息
-
自定义类也可以重写 toString( ) ,当调用此方法时,返回对象的 “实体内容”
包装类(Wrapper)的使用
一、包装类的理解
- 针对八种基本数据类型定义相应的引用类型包装类(封装类)
- 有了类的特点,就可以调用类中的方法,Java 才是真正的面向对象
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
二、数据类型转换
1.基本数据类型 to 包装类
// 调用包装类的构造器
public void test(){
Integer integer = new Integer(100);
Double double1 = new Double(100.1);
}
2.包装类 to 基本数据类型
// 调用包装类Xxx的xxxValue()
public void test(){
Integer integer = new Integer(100);
int i = integer.intValue();
System.out.println(i+1);
}
三、JDK 5.0 新特性:自动装箱与自动拆箱
1.自动装箱:基本数据类型 to 包装类
public void test(){
int num = 10;
Integer integer = num; // 自动装箱
}
2.自动拆箱:包装类 to 基本数据类型
public void test(){
Integer integer = new Integer(10);
int num = integer; // 自动拆箱
}
四、基本数据类型、包装类 与 String 的相互转化
基本数据类型、包装类 to String类型
方式一:连接运算
public void test(){
int num = 10;
String str = num + "";
}
方式二:调用String重载的valueOf( )方法
public void test(){
float f1 = 12.3f;
String str1 = String.valueOf(f1); // 12.3
Double d1 = new Double(12.4);
String str2 = String.valueOf(d1); // 12.4
}
String类型 to 基本数据类型、包装类
调用包装类的parseXxx( )方法
public void test(){
String str = "123";
int num = Integer.parseInt(str);
System.out.println(num + 1);
}