Java API:Object and Objects
目录1 Object
类Object
是类层次结构的根。 每个class
都有Object
作为超类。 所有对象(包括数组)都实现此类的方法。
1.1 常用方法
1.1 Object类的toString方法
public String toString()
- 返回对象的字符串表示形式。 通常,
toString
方法返回一个“文本表示”此对象的字符串。 - 建议所有子类都覆盖此方法。
- 类
Object
的toString
方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@
”以及对象的哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
1.1.1 示例
package com.fcarey.api;
public class Person {
private String name;
private int age;
public Person() {}
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;
}
@Override
public String toString() {
return "ToStringDemo [name=" + name + ", age=" + age + "]";
}
}
package com.fcarey.api;
public class ToStringDemo {
public static void main(String[] args) {
Person tsd = new Person();
tsd.setName("ToString Demo");
tsd.setAge(20);
System.out.println(tsd);
System.out.println(tsd.toString());
}
}
// 输出:
// ToStringDemo [name=ToString Demo, age=20]
// ToStringDemo [name=ToString Demo, age=20]
1.2 equals
public boolean equals(Object obj) // 指示某个其他对象是否“等于”此对象。
-
equals
方法在非null对象引用上实现等价关系:-
自反性:对于任何非空的参考值
x
,x.equals(x)
应该返回true
。 -
对称性 :对于任何非空引用值
x
和y
,x.equals(y)
应该返回true
当且仅当y.equals(x)
回报true
。 -
传递性 :对于任何非空引用值
x
,y
和z
,如果x.equals(y)
回报true
个y.equals(z)
回报true
,然后x.equals(z)
应该返回true
。 -
它是一致的 :对于任何非空引用值
x
和y
,多次调用x.equals(y)
始终返回true
或始终返回false
,前提是未修改对象上的equals
比较中使用的信息。 -
对于任何非空的参考值
x
,x.equals(null)
应该返回false
。
-
-
Object
的equals
方法实现了对象上最具区别的可能等价关系; 也就是说,对于任何非空引用值x
和y
,当且仅当x
和y
引用同一对象(x == y
具有值true
)时,此方法返回true
。 -
重写equals方法的场景:不希望比较对象的地址值,想要结合对象属性进行比较的时候。
- 请注意:通常需要在重写此方法时覆盖
hashCode
方法,以便维护hashCode
方法的常规协定,该方法声明相等对象必须具有相等的哈希代码。
- 请注意:通常需要在重写此方法时覆盖
1.2.1 示例
package com.fcarey.api;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {}
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;
}
@Override
public String toString() {
return "ToStringDemo [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
package com.fcarey.api;
public class EqualsDemo {
public static void main(String[] args) {
Person person = new Person();
person.setName("user");
person.setAge(20);
Person person2 = new Person();
person2.setName("user");
person2.setAge(20);
System.out.println(person.equals(person2));
}
}
1.2.2 面试题
package com.fcarey.api;
// 看程序,分析结果
public class Test {
public static void main(String[] args) {
String s = "abc";
StringBuilder sb = new StringBuilder();
sb.append("abc");
// 1.此时调用的是String类中的equals方法.
// 保证参数也是字符串,否则不会比较属性值而直接返回false
System.out.println(s.equals(sb)); // false
// StringBuilder类中是没有重写equals方法,用的就是Object类中的.
System.out.println(sb.equals(s)); // false
// 此时比较的是内容
System.out.println(s.contentEquals(sb)); // true
}
}
2 Objects
-
此类包含
static
实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null
或null
方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。 -
常用方法:
变量和类型 方法 描述 static boolean
deepEquals(Object a, Object b)
返回 true
如果参数是深层相等,彼此false
其他。static boolean
equals(Object a, Object b)
返回 true
如果参数相等,彼此false
其他。static boolean
isNull(Object obj)
返回 true
如果提供的参考是null
,否则返回false
。static boolean
nonNull(Object obj)
返回 true
如果提供的参考是非null
否则返回false
。static String
toString(Object o)
返回调用的结果 toString
对于非null
参数,"null"
为null
的说法。static String
toString(Object o, String nullDefault)
如果第一个参数不是 null
,则返回在第一个参数上调用toString
的结果,否则返回第二个参数。
2.1 示例
package com.fcarey.api;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {}
public Person(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;
}
@Override
public String toString() {
return "ToStringDemo [name=" + name + ", age=" + age + "]";
}
}
package com.fcarey.api;
import java.util.Objects;
public class MyObjectsDemo {
public static void main(String[] args) {
Person person = new Person("abc",22);
person = null;
String s = Objects.toString(person,"没有东东");
System.out.println(s); // 输出:没有东东
Person person2 = new Person();
boolean res = Objects.isNull(person2);
System.out.println(res); // 输出:false
boolean res2 = Objects.nonNull(person2);
System.out.println(res2); // 输出:true
}
}
标签:Java,name,age,Object,equals,API,public,String
From: https://www.cnblogs.com/f-carey/p/18386636