Integer的那些事
之前写代码时,看到Integer这个类型,突然想到之前遇到过类似问题,在此做一个小结记录一下。
Integer与int相互转化
Integer a = 100;
int b = 120;
int i = a.intValue(); //Integer转int
Integer integer = Integer.valueOf(b); //int转Integer
Integer 不同值的比较【imp】
//使用Integer.valueOf()和直接定义一个值是一样的,都属于自动装箱
Integer a1 = 66;
Integer b1 = 66;
Integer c1 = Integer.valueOf(66);
System.out.println(a1 == b1); //true
System.out.println(a1 == c1); //true
//只要是new Integer(),都会在堆中新建
Integer a2 = 60;
Integer b2 = new Integer(60);
System.out.println(a2 == b2); //false
//只要是超出[-128,127]区间,怎么比较都是false
Integer a3 = 128;
Integer b3 = 128;
Integer c3 = Integer.valueOf(128);
Integer d3 = new Integer(128);
System.out.println(a3 == b3); //false
System.out.println(a3 == c3); //false
System.out.println(a3 == d3); //false
System.out.println(c3 == d3); //false
//与null比较会报错,所以要避免传入的值为null
Integer a4 = null;
Integer b4 = Integer.valueOf(null);
System.out.println(b4 == a4); //NumberFormatException
System.out.println(b4.equals(a4)); //NumberFormatException
Integer的compareTo()方法
Integer a = 5;
Integer b = 10;
int result = a.compareTo(b);
if (result < 0) {
System.out.println("a 小于 b"); //result < 0 a < b
} else if (result > 0) {
System.out.println("a 大于 b"); //result > 0 a > b
} else {
System.out.println("a 等于 b"); //result = 0 a = b
}
使用Optional避免空指针异常
在Java中,空指针异常(NullPointerException)是一个常见的运行时异常,通常发生在试图访问一个空(null)对象的成员或方法时。为了避免这种情况,可以使用Java 8引入的Optional类。
Optional类是一个容器类,用于包装可能为null的值。它提供了一系列方法来处理可能为null的值,避免了空指针异常。以下是一些使用Optional类避免空指针异常的方法:
- 使用Optional.of()方法创建一个Optional对象,该方法接受一个非null的参数。如果参数为null,则抛出NullPointerException。
Optional<Integer> optional = Optional.of(123);
- 使用Optional.ofNullable()方法创建一个Optional对象,该方法接受一个可能为null的参数。如果参数为null,则返回一个空的Optional对象。
Optional<Integer> optional = Optional.ofNullable(null);
- 使用Optional.get()方法获取Optional对象中的值。如果Optional对象为空,则抛出NoSuchElementException。可以使用Optional.isPresent()方法先检查Optional对象是否为空。
//将返回的数据定义为Optional类型
Optional<User> optionalUser = getUserById(123);
if (optionalUser.isPresent()) {
User user = optionalUser.get();
// 对user对象进行操作
} else {
// 处理找不到用户的情况
}
- 使用Optional.orElse()方法获取Optional对象中的值,如果Optional对象为空,则返回一个默认值。
Optional<User> optionalUser = getUserById(123);
//参数中定义默认返回的对象
User user = optionalUser.orElse(new User("default"));
// 对user对象进行操作
- 使用Optional.orElseGet()方法获取Optional对象中的值,如果Optional对象为空,则返回一个通过调用指定方法得到的默认值。
Optional<User> optionalUser = getUserById(123);
User user = optionalUser.orElseGet(() -> new User("default"));
// 对user对象进行操作
- 使用Optional.orElseThrow()方法获取Optional对象中的值,如果Optional对象为空,则抛出一个指定的异常。
Optional<User> optionalUser = getUserById(123);
User user = optionalUser.orElseThrow(() -> new NoSuchElementException("User not found"));
// 对user对象进行操作
通过使用Optional类,可以避免空指针异常,提高代码的可读性和健壮性。
总结:
- Integer类型对于 [ -128,127 ] 区间的数是缓冲区取的,其他的范围则会在堆内存中new出来,地址值不同,所以用 == 比较为false。
- Integer类型不仅可以用普通运算符比较值的大小,还可以用 compareTo() 方法比较大小。
- 要避免与null值进行比较,会出现异常。可以使用Java1.8的 Optional类 避免空指针。