五(十一)、Object 类、Equals方法、toString方法、包装类、Junit
java.lang,Object类
1.Object类是所有java类的根父类
2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为 java.lang.Object类
Object中的功能(属性、方法)就具有通用性;
4.Object类只声明一个空参构造器
Equals:
面试题: == 和 equals()的区别
一、
==:运算符,可以使用基本数据类型变量和引用数据变量中;
如果比较的是基本数据变量,比较两个变量报错的数据是否相等(不一定类型要相同);
如果比较的是引用数据类型变量,比较的是地址值,即两个引用是否指向同一个对象实体;
equals:
是方法;而非运算符,通过对象来调用;
object类中对equals()的定义 与 “==” 作用是相同的;比较两个对象的地址值是否相同,即啷个引用是否指向同一个实体;
像String ,Date File 包装类等都重写了Object类中的equals()方法,重写以后,比较的不是两个引用的地址值是否相同,
而是比较两个对象的“实体内容”。
通常情况下,我们自定义的类如果使用equals()的话,也通常比较两个对象的“实体内容”是否相同,那么我们就需要对Object类中的
equals()进行重写;
以下手动重写equals方法:
10 class Person1{ 11 private String name; 12 private int age; 13 public String getName() { 14 return name; 15 } 16 public void setName(String name) { 17 this.name = name; 18 } 19 public int getAge() { 20 return age; 21 } 22 public void setAge(int age) { 23 this.age = age; 24 } 25 26 public void eat() { 27 System.out.println("人吃饭。。。。"); 28 study(); 29 } 30 31 public void study() { 32 System.out.println("学习。。。"); 33 } 34 public Person1(String name, int age) { 35 //super(); 36 this(age); 37 this.name = name; 38 //this.age = age; //等同于 this("Tome"); 39 } 40 public Person1() { 41 super(); 42 } 43 public Person1(String name) { 44 this();//调用当前的空参构造器 45 //super(); 46 this.name = name; 47 48 } 49 public Person1(int age) { 50 //super(); 51 this.age = age; 52 } 53 // @Override //手写部分 54 // public boolean equals(Object obj) { 55 // if(this == obj) { 56 // return true; 57 // }else if(obj instanceof Person1) { 58 // Person1 p = (Person1)obj; 59 // if(name.equals(p.name) && age == p.age) { 60 // return true; 61 // }else { 62 // return false; 63 // } 64 // }else { 65 // return false; 66 // } 67 // } 68 @Override 69 public int hashCode() { 70 final int prime = 31; 71 int result = 1; 72 result = primeresult + age; 73 result = primeresult + ((name == null) ? 0 : name.hashCode()); 74 return result; 75 }
//代码自动生成的equals 76 @Override 77 public boolean equals(Object obj) { 78 if (this == obj) 79 return true; 80 if (obj == null) 81 return false; 82 if (getClass() != obj.getClass()) 83 return false; 84 Person1 other = (Person1) obj; 85 if (age != other.age) 86 return false; 87 if (name == null) { 88 if (other.name != null) 89 return false; 90 } else if (!name.equals(other.name)) 91 return false; 92 return true; 93 } 94 95 96 }
1 public static void main(String[] args) { 2 int i = 10; 3 int j = 10; 4 double d = 10.0; 5 char c = 10; 6 System.out.println(i == j);//true 7 System.out.println(i == d);//true 8 System.out.println(c == i);//true 9 10 Person1 person1 = new Person1("Tom", 11); 11 Person1 person2 = new Person1("Tom", 11); 12 13 14 System.out.println(person1 == person2);//false 15 System.out.println(person1.equals(person2));//false重写前,重写后是true; 16 }
toString()方法:
Object类中tostring()的使用
1.当我们输出一个对象的引用是,实际上调用的是当前对象的toString();
2.Object的定义:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3. String Date File 包装类等都重写过toString()方法,使得在调用对象的实体时,返回“实体信息”;
4.自定义类也可以重写toString()方法,一般默认生成即可
5.对象.toString();如果对象是null 则报错 空指针异常;
Junit单元测试:
Java中的JUnite单元测试
步骤:1.选中当前工程 右键选择bulidpath add libraries -- JUnite 5 - finish;
2.创建Java类,进行单元测试;此类是public 此类提供公共的无参构造器
3.此类中声明单元测试方法:
权限是public 没有返回值 没有形参;
需要@Test注解,
在单元测试类中导入 import org.junit.Test
4.声明好单元测试方法以后,就可以在方法体内测试相关代码;
5.写完代码以后,左键双击方法名,右键:run as JUnite Test
说明:
1.如果执行结构没有任何异常,绿条
2.如果执行结果出现异常,红条
包装类:
包装类的使用
1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征;
2.基本数据类型 包装类 string 三者之间的转换;
1 //基本数据类型 --》 包装类:调用包装类的构造器 2 @Test 3 public void test1() { 4 int num1 = 10; 5 Integer in1 = new Integer(num1); 6 System.out.println(in1.toString()); 7 Float f1 = new Float(12.3); 8 Double d1 = new Double(12.3); 9 Boolean b1 = new Boolean(true); 10 Boolean b2 = new Boolean("true"); 11 Boolean b3 = new Boolean("true123"); 12 System.out.println(b3);//false 13 } 14 //包装类--》 基本数据类型 :调用包装类的 xxxValue(); 15 @Test 16 public void test2() { 17 int num1 = 10; 18 Integer in1 = new Integer(num1); 19 int num2 = in1.intValue(); 20 System.out.println(num2+1); 21 Float f1 = new Float(12.3); 22 float f2 = f1.floatValue(); 23 System.out.println(f2);//false 24 } 25 //自动装箱 与 自动拆箱 26 @Test 27 public void test3() {; 28 int num = 10; 29 Integer in1 = num;//自动装箱 30 int num1 = in1;//自动拆箱; 31 method(num); 32 } 33 //基本数据类型 包装类 --》String; 调用String重载的valueOf(Xxx xxx); 34 @Test 35 public void test4() { 36 //方式一 37 int num = 10; 38 String str = num+""; 39 //方式二 40 str = String.valueOf(num); 41 42 } 43 // String--》基本数据类型 包装类; 包装类的parseXXX(); 44 @Test 45 public void test5() { 46 String str = "123"; 47 //可能会出现 numberformate 异常 48 Integer in1 = Integer.parseInt(str); 49 String str1 = "true"; 50 Boolean b1 = Boolean.parseBoolean(str1); 51 52 53 } 54 public void method(Object obj) { 55 System.out.println(obj); 56 }