目录
Object 类的使用
==操作符与equals方法
= =:
equals()
重写equals()方法的原则
面试题
toString() 方法
包装类(Wrapper)的使用
基本类型、包装类与String类间的转换
包装类用法举例
总结
Object 类的使用
Object类是所有Java类的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类 为java.lang.Object类
public class Person {...}
等价于:
public class Person extends Object {...}
method(Object obj){…} //可以接收任何类作为其参数
Person o=new Person();
method(o);
==操作符与equals方法
= =:
基本类型比较值:只要两个变量的值相等,即为true。 int a=5; if(a==6){…}
引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true。
Person p1=new Person();
Person p2=new Person();
if (p1==p2){…}
用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本 数据类型除外)
equals()
equals():所有类都继承了Object,也就获得了equals()方法。还可以重写。
- 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
- 格式:obj1.equals(obj2)
特例:当用equals()方法进行比较时,对类File、String、Date及包装类 (Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;
原因:在这些类中重写了Object类的equals()方法。
当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等
重写equals()方法的原则
- 对称性:如果x.equals(y)返回是“true” ,那么y.equals(x)也应该返回是 “true”。
- 自反性:x.equals(x)必须返回是“true”。
- 传递性:如果x.equals(y)返回是“true” ,而且y.equals(z)返回是“true” , 那么z.equals(x)也应该返回是“true”。
- 一致性:如果x.equals(y)返回是“true” ,只要x和y内容一直不变,不管你 重复x.equals(y)多少次,返回都是“true”。
- 任何情况下,x.equals(null),永远返回是“false” ;
- x.equals(和x不同类型的对象)永远返回是“false”。
面试题
- == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型 就是比较内存地址
- equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
- 具体要看自定义类里有没有重写Object的equals方法来判断。
- 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。
toString() 方法
在进行String与其它类型数据的连接操作时,自动调用toString()方法
Date now=new Date();
System.out.println(“now=”+now); 相当于System.out.println(“now=”+now.toString());
可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。
s1=“hello”;
System.out.println(s1);//相当于System.out.println(s1.toString());
基本类型数据转换为String类型时,调用了对应包装类的toString()方法
int a=10; System.out.println(“a=”+a);
包装类(Wrapper)的使用
基本数据类型包装成包装类的实例---装箱
通过包装类的构造器实现:
int i = 500; Integer t = new Integer(i);
还可以通过字符串参数构造包装类对象:
Float f = new Float(“4.56”);
Long l = new Long(“asdf”); //NumberFormatException
获得包装类对象中包装的基本类型变量 ---拆箱
调用包装类的.xxxValue()方法:
boolean b = bObj.booleanValue();
JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配
基本类型、包装类与String类间的转换
字符串转换成基本数据类型
- 通过包装类的构造器实现: int i = new Integer(“12”);
- 通过包装类的parseXxx(String s)静态方法: Float f = Float.parseFloat(“12.1”);
基本数据类型转换成字符串
- 调用字符串重载的valueOf()方法: String fstr = String.valueOf(2.34f);
- 更直接的方式: String intStr = 5
包装类用法举例
int i = 500;
Integer t = new Integer(i);
装箱:包装类使得一个基本数据类型的数据变成了类。
有了类的特点,可以调用类中的方法。
String s = t.toString(); // s = “500“,t是类,有toString方法
String s1 = Integer.toString(314); // s1= “314“ 将数字转换成字符串。
String s2=“4.56”;
double ds=Double.parseDouble(s2); //将字符串转换成数字
拆箱:将数字包装类中内容变为基本数据类型。
int j = t.intValue(); // j = 500,intValue取出包装类中的数据
包装类在实际开发中用的最多的在于字符串变为基本数据类型。
String str1 = "30" ;
String str2 = "30.3" ;
int x = Integer.parseInt(str1) ; // 将字符串变为int型
float f = Float.parseFloat(str2) ; // 将字符串变为int型
总结
package com.jyc.p2;
/*
一.class java.lang.Object 类
①equals()
1.Object类是所有Java类的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
objec 类中的属性和方法都具备通用性(object类中声明了一个空参构造器)
属性 无
方法:equals(),toString(),getClass(),hashCode(),clone(),finalize(),wait() notify(),notifyAll()
2.==&&equals的区别
==运算符
可以使用在基本数据类型变量和引用数据类型变量中
如果比较的是基本数据类型变量,比较保存的两个数据是否相等(不一定类型要相同)
如果比较的是引用数据类型变量,比较两个对象的地址值是否相同
3.equals()方法的使用
equals是一个方法,而非运算符
只能适用于引用数据类型
object.equals的定义
public boolean equals(Object obj) {
return (this == obj);
}
4.说明object.equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个对象的引用是否相同
像 String Date File 包装类等都重写了object类中的equals方法,重写以后比较的不是两个引用地址是否相同,
而是比较两个对象的实体内容是否相同
5..通常情况下我们自定义得类如果使用equals()方法,也通常是比较两个对象的实体内容是否相同,那么
我们就需要对object类中的equals()进行重写 (重写的原则比较两个对象的实体内容是否相同)
② toString()
1.当我门输出对象的一个引用时,实际上是调用当前对象的toString方法
2.object.toString()的定义
获取类的类名+通过hashCode获取空间地址值转为16进制(虚拟地址)
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3.像 String Date File 包装类等都重写了object类中的 toSring 方法,是的调用对象的toString方法时返回实体内容信息
4.自定义类也可以重写toString方法 当调用此方法时返回对象的实体内容
二 包装类的使用
1.java提供了八种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
基本数据类型 包装类 String三者直接的相互转换
基本数据类型转为包装类:调用包装类的构造器(自动装箱)
包装类转为基本数据类型调用包装类xxx的xxxvale;(自动拆箱)
基本数据类型,包装类转为string 连接运算, 调用String.valueof()
string转为基本数据类型,包装类 调用包装类的parsexxx()
* */
public class Test99 {
public static void main(String[] args) {
Order order1=new Order("zs",18);
Order order2=new Order("zs",18);
System.out.println(order1.getClass().getSuperclass());
System.out.println("---------==比较基本数据类型-------------");
int i=10;
char j=10;
System.out.println(j==i);
System.out.println("---------==比较引用数据类型--------------");
String str1=new String("str");
String str2=new String("str");
System.out.println(str1==str2);
System.out.println("---------equals的使用------------");
System.out.println(str1.equals(str2));//true
System.out.println(order1.equals(order2));//false--->true
System.out.println("--------toString的使用----------");
System.out.println(order1.toString());//com.jyc.p2.Order@1540e19d--》Order[name=zs,age=18]
System.out.println("-----------基本数据类型转为包装类---------------");
int num=10;
Integer num1=new Integer(num);
System.out.println(num1.toString());
System.out.println(num1.toString());
Boolean b1=new Boolean(true);//true
Boolean b2=new Boolean("trUe");//true
Boolean b3=new Boolean("true123"); //false
System.out.println(b1);
System.out.println(order1.isFlage); //null
System.out.println("-----------包装类转为基本数据类型---------------");
Integer in1=new Integer(12);
int i1= in1.intValue();
System.out.println(i1+1);//13
System.out.println("-----------装箱&&拆箱---------------");
//装箱
int num3=10;
Integer in3=num;
System.out.println(in3);
//拆箱
int num4=in3;
System.out.println(num4);
System.out.println("---------- 基本数据类型,包装类转为string---------------");
//连接运算
int num6=66;
String s1=num6+" ";
Double d1=new Double(12.3);
String str3=String.valueOf(d1);
System.out.println(s1);
System.out.println(str3);
System.out.println("---------- string转为基本数据类型,包装类---------------");
String s5="123";
int num5=Integer.parseInt(s5);
System.out.println(num5+1);
}
}
class Order{
int age;
String name;
Boolean isFlage;
Order(){ }
Order( String name,int age){
this.name=name;
this.age=age;
}
//重写 equals 方法 比较两个对象的实体内容
public boolean equals(Object obj) {
//判断两个对象是否是同一个对象
if (this==obj){
return true;
}
//判断两个对象是不是同一个类
if (obj instanceof Order){
//强制类型转换为Order相同类
Order o=(Order)obj;
return this.age==o.age &&this.name.equals(o.name);
}else{
return false;
}
}
//重写toString方法
public String toString() {
return "Order[name="+name+",age="+age+"]";
}
}