目录
一、==与equals的区别
1.1 ==的使用
==:属于运算符
①可以在基本数据类型变量和引用数据变量中。
②当比较的是基本数据类型变量时,比较两个变量保存的数据是否相同(两个变量的类型不一定要相同)。
③当比较的是引用数据类型变量时,比较两个变量的地址值的是否相同(即两个变量是否指向同一个对象实体)。
注:不能在基本数据类型变量和引用数据变量之间使用 ==。
1.2 equals()方法的使用
① object类中equals() 的定义:
public boolean equals(Object obj){
return (this == obj);}
② equals是一个方法而非运算符,只能用于引用数据类型
1.3 二者的说明
① Object 类中定义的equals() 和 == 的作用是相同的,比较两个的地址值是否相同(即两个变量是否指向同一个对象实体)
② 在String、Date、File、包装类等中都重写了Object类中的equals()方法。重写后的方法比较的是两个对象的“实体内容”是否相同。
1.4 重写equals()方法的原则
对称性:如果a.equals(b) 返回的是“true”,那么b.equals(a) 返回的也是“true”。
自反性:a.equals(a) 必须返回的是“true”。
传递性:如果a.equals(b) 返回的是“true”,且b.equals(c) 返回的也是“true”,那么c.equals(a)返回的也应该是“true”。
一致性:如果a.equals(b) 返回的是“true”,只要a,b内容不变,a.equals(b)无论重复多少次,返回的都是“true”。
特殊情况:a.equals(null) 永远返回“false”:a.equals(只要是和a不同类型的对象)返回的都是“false”。
1.5 equals()与 == 的例子说明
package cn.spilt_charging.contact;
import java.sql.Date;
public class EqualsTest {
public static void main(String[] args) {
//基本数据类型
System.out.println("******基本数据类型*******");
int number1 = 10;
int number2 = 10;
double number3 = 10.0;
System.out.println(number1 == number2); //输出结果True
System.out.println(number2 == number3); //输出结果True
// boolean flag1 = true;
// System.out.println(number1 == flag1); //无法比较,编译就无法通过了
char letter1 = 'A';
char letter2 = 65;
char letter3 = 'A';
System.out.println(letter1 == letter2); //输出结果True
System.out.println(letter1 == letter3); //输出结果True
//引用数据类型
System.out.println("******引用数据类型*******");
Person person1 = new Person("Tom",20);
Person person2 = new Person("Tom",20);
System.out.println(person1 == person2); //输出结果False
String str1 = new String("AAA");
String str2 = new String("AAA");
System.out.println(str1 == str2); //输出结果False
System.out.println("******使用equals******");
System.out.println(person1.equals(person2)); //输出结果False
System.out.println(str1.equals(str2)); //输出结果True
Date date1 = new Date(123456L);
Date date2 = new Date(123456L);
System.out.println(date1.equals(date2)); //输出结果True
}
}
class Person{
private String name;
private int age;
public Person() {
super();
}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
二、 tostring 的使用
2.1 Object 中 tostring 的定义方法
public String toString(){
return getClass().getName() + “@” + Integer.toHexString(hashCode());}
2.2 tostring 的说明
在String、Date、File、包装类等都重写了Object类中的toString()方法。重写后的方法,返回“实体内容”信息。
2.3 tostring 的例子说明
package cn.spilt_charging.contact;
import java.sql.Date;
public class tostringTest {
public static void main(String[] args){
Customer cust1 = new Customer("Tom",21);
System.out.println(cust1.toString()); //输出结果:cn.spilt_charging.contact.Customer@6f2b958e
System.out.println(cust1); //输出结果:cn.spilt_charging.contact.Customer@6f2b958e
String str = new String("MM");
System.out.println(str); //输出结果:MM
Date date = new Date(2344566L);
System.out.println(date.toString()); //输出结果:1970-01-01
}
}
class Customer{
private String name;
private int age;
public Customer() {
super();
}
public Customer(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
三、 包装类的使用
3.1 包装类的说明
注意:其中Byte、Shout、Integer、Long、Float、Double的父类是Number
3.2 包装类与基本数据类型相互转换
① String类型转变为基本数据类型、包装类、调用包装类的 parseXxx()
② 基本数据类型、包装类转变为String类型,调用String重载的valueOf(Xxx xxx)
③ 基本数据类型转变为包装类,调用包装类的构造器
④ 基本数据类型转变为包装类(使用自动装箱)
⑤ 包装类转变为基本数据类型(自动拆箱)
⑥ 包装类转变为基本数据类型,调用包装类的xxxValue()
3.3 包装类的作用
使基本数据类型具有类的特征
3.4 包装类的例子说明
package cn.spilt_charging.contact;
public class packTest {
public static void main(String[] args) {
Wrapper wrapper = new Wrapper();
System.out.println("***********test1()************");
wrapper.test1(); //输出结果:10 10
System.out.println("***********test2()************");
wrapper.test2(); //输出结果:13 23.3
System.out.println("***********test3()************");
wrapper.test3(); //输出结果:10
System.out.println("***********test4()************");
wrapper.test4(); //输出结果:12.3 12.4
System.out.println("***********test5()************");
wrapper.test5(); //输出结果:128 true
}
}
class Wrapper{
public void test5() {
String str1 = "123";
//int num1 = (int)str1; //编译就无法通过
//Integer in1 = (Integer)str1; //编译就无法通过
int num2 = Integer.parseInt(str1);
System.out.println(num2 + 5); //输出结果为:128
String str2 = "true";
Boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1); //输出结果:true
}
public void test4() {
int num1 = 10;
//方式1:连接运算
String str1 = num1 + "";
//方式2:调用String的valueOf(Xxx xxx)
float f1 = 12.3f;
String str2 = String.valueOf(f1);
Double d1 = new Double(12.4);
String str3 = String.valueOf(d1);
System.out.println(str2); //输出结果为:12.3
System.out.println(str3); //输出结果为:12.4
}
public void test3() {
//基本数据类型转变为包装类(采用自动装箱)
int num2 = 10;
Integer int1 = num2; // 自动装箱
boolean b1 = true;
Boolean b2 = b1; //自动装箱
//包装类转变为基本数据类型(采用自动拆箱)
System.out.println(int1.toString()); //输出结果为:10
}
public void test2() {
//包装类转变为基本数据类型(调用包装类的xxxValue())
Integer number1 = new Integer(12);
int number2 = number1.intValue();
System.out.println(number2 + 1);
Float float1 = new Float(22.3f);
float float2 = float1.floatValue();
System.out.println(float2 + 1);
}
public void test1() {
//基本数据类型转变为包装类(调用包装类的构造器)
int number1 = 10;
Integer number2 = new Integer(number1);
System.out.println(number2.toString());
Integer number3 = new Integer(123);
System.out.println(number2.toString());
}
}
最后到这里,文章就结束了,如果在内容上有问题,恳请各位大佬指出。