//创建Student类的对象 Student stu = new Student("张三", 18); //调用toString方法 /* Student类没有覆盖重写Object类的toString方法 结果是内存地址值: com.itheima.pojo.Student@1540e19d Student类覆盖重写Object类的toString方法 结果: Student{name='张三', age=18} */ String s1 = stu.toString(); System.out.println(s1); System.out.println(stu.toString()); System.out.println(stu);
//equals() 比较调用方法的对象和方法参数对象是否相等 //注意: 只要new对象,内存地址就是不同的 // this代表: 调用方法的对象 // obj代表: 调用方法时传递的参数对象 // ==: 在比较两个对象的内存地址值是否相同 //创建Student类的对象 Student stu1 = new Student("张三", 18); Student stu2 = new Student("李四", 38); Student stu3 = new Student("张三", 18); /* Student类没有覆盖重写Object类的equals方法 结果(比较内存地址值): false,false,false Student类覆盖重写Object类的equals方法 结果: false,true,false */ //(2)重写equals方法: 目的:比较对象的内容,而不是地址值 //快捷键: alt + insert --> equals && hashCode() --> 选择成员变量 --> ok //3.==的使用 (1)基本类型: 比较具体的数据值是否相同 // (2)引用类型: 比较的是内存地址值是否相同 System.out.println(stu1.equals(stu2)); System.out.println(stu1.equals(stu3)); System.out.println(stu2.equals(stu3));
/* 直接比较对象的内存地址没有意义, 需要比较对象的内容, 认为name相同并且age也相同的两个对象是相同的 快捷键: alt + insert --> equals && hashCode() --> 选择成员变量 --> ok */ @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); }
@Override public boolean equals(Object o) { //调用方法的对象和参数对象是同一个对象,直接返回true if (this == o) return true; /* o == null: 参数是null,直接返回false ||: 或者 getClass() != o.getClass(): 调用方法的对象和参数对象不是同一个类的对象,直接返回false 等价于: !(o instanceof Student) 判断o指向的不是Student类的对象 */ //if (o == null || !(o instanceof Student)) return false; if (o == null || getClass() != o.getClass()) return false; //把参数对象o强制类型转换成Student对象 Student student = (Student) o; /* age == student.age: 调用方法的对象和参数对象的age属性相同 &&:并且 Objects.equals(name, student.name): 使用工具类调用静态方法equals比较调用方法的对象和参数对象的name属性相同 age相同 并且 name也相同,才返回true,否写返回false */ return age == student.age && Objects.equals(name, student.name); }
String s1 = null; String s2 = "abc"; //System.out.println(s1.equals(s2));//报空指针异常 /* Objects工具类的静态方法equals 作用: 比较两个对象是否相同,避免空指针异常 */ System.out.println(Objects.equals(s1,s2));//false: 不会报空指针异常
2.给某些字符添加特殊含义 \t: 制表符 \r\n: windows换行 //以字符串的方式输出 " System.out.println("\""); //以字符的方式输出 ' System.out.println('\'');