前面我们重写equals方法的时候,发现比较两个对象是否相等,用的是objects的equals方法,而不是用对象自己的equals方法来比较:
这是为什么呢?
接下来就来学习一下Objects类的相关知识。
Objects
- Objects是一个工具类,提供了很多操作对象的静态方法给我们使用。
Objects类的常见方法
equals方法
public class Test { public static void main(String[] args) throws CloneNotSupportedException { String s1 = null; String s2 = "hello"; //如果使用Object父类的equals方法,会因为调用了空地址而报错 //System.out.println(s1.equals(s2)); //所以就需要用Objects工具类的equals System.out.println(Objects.equals(s1, s2)); } }
运行结果:
其源码:(按住Ctrl键+鼠标左键点击目标方法)
下面两个方法的用法都比较简单直接:
isNull方法
System.out.println(Objects.isNull(s1)); //true //效果相当于下面这句 System.out.println(s1 == null);//true System.out.println(Objects.isNull(s2)); //false System.out.println(s2 == null);//false
运行结果:
nonNull方法
System.out.println(Objects.nonNull(s2)); //true System.out.println(Objects.nonNull(s1)); //false
运行结果:
包装类
介绍
为什么要有包装类?
对于基本类型,它们都不是对象;但是如果在泛型中我们需要用到这些基本类型的数据,而泛型又只能传入引用数据类型,这个时候包装类就发挥了作用了。
- 包装类就是把基本类型的数据包装成对象。
基本数据类型 | 对应的包装类(引用数据类型) |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
接下来以Integer为例,展示一下基本类型的数据包装成对象的方法:
包装方法及自动装拆箱
基本类型的数据包装成对象的方法 |
public Integer(int value) 已过时 |
public static Integer valueOf(int i) |
具体用法:
public class Test { public static void main(String[] args) { // Integer a1 = new Integer(12); //已过时 Integer a2 = Integer.valueOf(12); System.out.println(a2); } }
运行结果:
对于包装类来说,是可以自动装箱和拆箱的,
- 自动装箱:基本数据类型可以自动转换为包装类型。
- 自动拆箱:包装类型可以自动转换为基本数据类型。
//自动装箱 Integer a3 = 12; //自动拆箱 int a4 = a3;
在泛型或者集合中应用:
public class Test { public static void main(String[] args) { //ArrayList<int> list = new ArrayList<int>(); //不支持基本数据类型 ArrayList<Integer> list = new ArrayList<>(); list.add(12); //自动装箱 list.add(13);//自动装箱 int rs = list.get(1); //自动拆箱 System.out.println(rs); } }
运行结果:
其他常见操作
- 可以把基本类型的数据转换成字符串类型。
public static String toString(double d)
public String toString()
- 可以把字符串类型的数值转换成数值本身对应的数据类型。
public static int parseInt(String s)
public static Integer valueOf(String s)
具体用法:
把基本类型的数据转换成字符串类型
public class Test { public static void main(String[] args) { //1.把基本类型的数据转换成字符串 //第一种写法 Integer a = 23; String rs1 = Integer.toString(a); //转换成 “23” System.out.println(rs1 + 1); //字符串拼接,结果为231 System.out.println(); //第二种写法 String rs2 = a.toString(); System.out.println(rs2 + 1); //结果一样为231 System.out.println(); //第三种 String rs3 = a + ""; //自动转换类型 System.out.println(rs3 + 1); } }
运行结果:
把字符串类型的数值转换成数值本身对应的数据类型
public class Test { public static void main(String[] args) { //2.把字符串类型的数值转换成对应的基本类型 String ageStr = "29"; //int ageI = Integer.parseInt(ageStr); //29 //更建议使用下面这种,用的时候不需要多记一个方法 int ageI = Integer.valueOf(ageStr); //29 System.out.println(ageI + 1); // 30 System.out.println(); String scoreStr = "99.5"; // double score = Double.parseDouble(scoreStr); //99.5 //同样的,建议使用下面这种方法 double score = Double.valueOf(scoreStr);//99.5 System.out.println(score + 0.5); } }
运行结果:
END