JavaSE——常用API进阶一(2/3)-Objects类(equals方法、isNull方法、nonNull方法)、包装类(介绍、包装方法及自动装拆箱、其他常见操作)

简介: JavaSE——常用API进阶一(2/3)-Objects类(equals方法、isNull方法、nonNull方法)、包装类(介绍、包装方法及自动装拆箱、其他常见操作)

前面我们重写equals方法的时候,发现比较两个对象是否相等,用的是objects的equals方法,而不是用对象自己的equals方法来比较:


这是为什么呢?

接下来就来学习一下Objects类的相关知识。

Objects

  • Objects是一个工具类,提供了很多操作对象的静态方法给我们使用。

Objects类的常见方法

图片.png

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



目录
相关文章
|
9天前
|
自然语言处理 算法 Java
地址描述转换为坐标点不使用API,有什么转换的方法?
地址描述转换为坐标点不使用API,有什么转换的方法?
180 64
|
2月前
|
API 索引
String类下常用API
String类下常用API
36 1
|
2月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
72 0
|
27天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
25天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
2月前
|
安全 Java API
|
2月前
|
UED 开发工具 iOS开发
Uno Platform大揭秘:如何在你的跨平台应用中,巧妙融入第三方库与服务,一键解锁无限可能,让应用功能飙升,用户体验爆棚!
【8月更文挑战第31天】Uno Platform 让开发者能用同一代码库打造 Windows、iOS、Android、macOS 甚至 Web 的多彩应用。本文介绍如何在 Uno Platform 中集成第三方库和服务,如 Mapbox 或 Google Maps 的 .NET SDK,以增强应用功能并提升用户体验。通过 NuGet 安装所需库,并在 XAML 页面中添加相应控件,即可实现地图等功能。尽管 Uno 平台减少了平台差异,但仍需关注版本兼容性和性能问题,确保应用在多平台上表现一致。掌握正确方法,让跨平台应用更出色。
34 0
|
2月前
|
数据采集 API TensorFlow
简化目标检测流程:深入探讨TensorFlow Object Detection API的高效性与易用性及其与传统方法的比较分析
【8月更文挑战第31天】TensorFlow Object Detection API 是一项强大的工具,集成多种先进算法,支持 SSD、Faster R-CNN 等模型架构,并提供预训练模型,简化目标检测的开发流程。用户只需准备数据集并按要求处理,选择预训练模型进行微调训练即可实现目标检测功能。与传统方法相比,该 API 极大地减少了工作量,提供了从数据预处理到结果评估的一站式解决方案,降低了目标检测的技术门槛,使初学者也能快速搭建高性能系统。未来,我们期待看到更多基于此 API 的创新应用。
24 0
|
2月前
|
API
【Azure API 管理】APIM中的Policy是否有调用速率的方法(熔断机制)
【Azure API 管理】APIM中的Policy是否有调用速率的方法(熔断机制)
|
2月前
|
开发框架 中间件 .NET
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法