Object类
Object类是Java中所有类的父类,所以Object下的方法同时也是所有类的共有方法,
即使是你自定义的一个类,也拥有Object的方法。
所以需要掌握Object类下的常见方法:
equals方法
a.equals(b); 其中a和b都要是一个对象而非一个基本数据类型或一个类。
含义:判断两个对象是否为同一个对象(内存地址是否相等,本质就是==),返回一个boolean值。
凡是new出来的不可能是同一个对象。
toString方法
public static void main(String[] args) {
Student s1 = new Student(1, "张三", 12);
Student s2 = new Student(1, "张三", 12);
boolean b = s1.equals(s2);
System.out.println(b);
注意上述s1和s2即使每个属性值都一样,但是依然返回false,原因就是都是new出来的。
注意:如果需要在某些特定场景,equals不是判断内存地址,而是判断id如何实现。
常见面试题:
==和equals的区别
*==如果作用于基本数据类型。就判断值是否相等。
==如果作用于引用数据类型,就判断地址是否相等
String str1 = new String("你好") ;
String str2 = new String("你好") ;
System.out.println( str1 == str2); false
System.out.println( 1 == 1); true
String str1 = "你好";
String str2 = "你好";
System.out.println( str1 == str2);true
意味着str1和str2的地址是一样的。
总结:String声明变量的区别:
String str = new String("xxx");
不管xxx是什么,都要重新开辟一个新的内存。
String str = xxx ;
如果xx存在了就不去开辟了 而是直接引用已经存在的,
*equals:只能作用于引用数据类型,本质就是==
但是大部分的类都重写了equasl方法,例如String,Date
重写之后的equals则是判断值是否相等
String str1 = "你好";
String str2 = "你好";
System.out.println( str1.equals(str2) ); true
错误的解释:因为str1和str2都是直接声明的所有地址相等
String str1 = new String("你好") ;
String str2 = "你好";
System.out.println( str1.equals(str2) ); true
原因:String 也重写了equals方法,是判断值是否相等而非地址
Object常见方法 : toString
总结:
直接打印对象,和打印对象的.toString方法 效果是一样的 一般都是省略
Object的toString打印:对象的内存地址,格式: 路径+ @ + 内存地址
如果存在某个场合,希望打印的是具体属性信息而非地址,则可以通过重写toString方法实现。
大部分的实体类都会重写toString
//包装类如何声明变量 和String一样
Integer a = 123;//直接声明
Integer b = new Integer(123);//通过构造方法声明
包装类
包装类是专门针对于基本数据类型而言。
由于基本数据类型没有方法或属性。
为了更加方便对基本数据类型的值进行操作,Java提供了八大基本数据类型的包装类。
boolean byte
char short
int float
double long
Boolean Byte
Character Short
Integer Float
Double Long
//包装类的用途:
//1.作为实体类属性的数据类型,替换基本数据类型。
//以前的写法 见下方的Student类
Student s = new Student(123, "张三", 18,18);
Student s1 = new Student();
System.out.println(s);
System.out.println(s1);
//缺点:基本数据类型的默认值为0 而引用数据类型的默认值为null
//2.将字符串转为对应的基本数据类型
String str = "123445";
int i = Integer.parseInt(str);
System.out.println(i);
double d = Double.parseDouble(str);
}