【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)

简介: 【8月更文挑战第10天】java基础巩固,工具类的封装

基础知识巩固

在代码开发中,经常涉及两个数值的比较问题。在前端中,最简单的比较就是使用“==”运算符

1 === "1" // false
1 == "1"  // true

在java中,对象的比较和前端是存在差异的,我们通过本节内容详细巩固一下。开始之前,我们先复习一下差异项:

  • java中的单引号表示字符,一般是char类型的;java中的双引号是字符串,是String类型的。
  • 在Java中,=== 符号并不存在、也没有undefined这个概念
  • Java使用 == 操作符来比较两个值是否相等,当比较两个基本数据类型(如 int、char、double 等时,== 操作符的效果是相同的
  • 在比较两个对象的内容是否相等时,不能使用 == 操作符!在Java中,对象比较的是它们的引用,而不是它们的值。在这种情况下,你应该使用 .equals() 方法来比较两个对象的内容
  • java中,数据类型主要分为基本数据类型和引用数据类型
    | 基本数据类型 | | 引用数据类型 | |
    | --- | --- | --- | --- |
    | 整形(整数) | byte、short、int、long | String | 表示字符串 |
    | 浮点型数据类型(小数) | float、double | Array | 表示数组 |
    | 字符型数据类型 | char | Class | 表示类类型 |
    | 布尔型数据类型 | boolean | Interface、Enum | 表示接口类型及表示枚举类 |

“==” 比较符

基本数据类型比较

  public static void main(String[] args) {
   
   
     int a = 1;
     int b = 1;
     System.out.println(a==b); // true
  }

基本数据类型中,“==”比较的是数值大小

 public static void main(String[] args) {
   
   
     int a = 10;
     double b = 10.0;
     System.out.println(a==b); // 10和10.0数值相等,所以结果为true
  }

引用数据类型的比较

在Java中,对于引用数据类型(如对象、数组等),"=="操作符比较的是它们的引用是否相等,也就是说,比较它们是否指向内存中的同一个位置。

String a = "123";
String b = new String("123");
System.out.println(a == b);  // false

上述代码中,String a = "123"会创建一个字符串对象,new String("123")也会创建一个新的字符串对象,两个字符串内存地址不同,因此a==b结果为false

如果想比较值是否相同,我们使用.equals()方法。

String a = "123";
String b = new String("123");
System.out.println(a.equals(b)); // true

字符串的比较是一个比较常见的操作,因此,String类存在一些优化

String a = "123";
String b = "123";
System.out.println(a == b);  // true

如上述代码的字符声明方式,在字符比较时,比较的就是他们的值内容而不是引用地址。

类的比较

public class My_Utils {
   
   
    public static void main(String[] args) {
   
   
        Compare compare1 = new Compare();
        Compare  compare2 = new Compare();
        System.out.println(compare1 == compare2);
    }
}

class Compare {
   
   

}

观察上述代码,根据之前的知识,我们能很快知道compare1 == compare2的比较结果为fasle。
因为new 会创建一个新对象,比较的就是内存地址。
那我们使用equals是否能比较其内容呢?

Compare compare1 = new Compare();
Compare  compare2 = new Compare();
System.out.println(compare1.equals(compare2));    // false

结果为fasle,这是为什么呢?我们进入compare1对象上的的 equals内部看看就明白了
GIF 2023-10-28 13-06-24.gif
通过代码,我们可以知道,其内部实际就是还是调用了"=="运算符,自然结果还是fasle

包装类的比较

我们来复习下Java中的包装类有哪些:

  • Integer(对应int)
  • Double(对应double)
  • Float(对应float)
  • Long(对应long)
  • Short(对应short)
  • Byte(对应byte)
  • Character(对应char)
  • Boolean(对应boolean)

我们来看一个demo

    public static void main(String[] args) {
   
   
        Integer a = 200;
        Integer b = 200;
        System.out.println(a == b); 
    }

上述代码中Integer a = 200实际上是Integer numObj = Integer.valueOf(10); 的简写形式,我们称之为为自动装箱;这个过程是一个new的过程,创建了新对象。因此,根据 “==”在类中只比较引用地址的特性,我们可以知道上面的比较结果是fasle。
事实也的确如此!
我们看另外一个例子

    public static void main(String[] args) {
   
   
        Integer a = 200;
        Integer b = 200;
        System.out.println(a == b);  // false
        Integer c = 100;
        Integer d = 100;
        System.out.println(c == d);  // true
    }

image.png
结果似乎和我们想想的不一样,这是为什么呢?
原来,对于Integer类,Java会自动缓存-128到127之间的值,也就是说,如果创建的Integer对象的值在这个范围内,那么它们会被自动缓存为同一个对象。所以,当a和b的值都在这个范围内时,a == b的结果为true。
然而,当c和d的值超过这个范围时,Java不会为这些对象进行缓存。所以,尽管它们的值相同,但是因为它们不是同一个对象,所以c == d的结果为false。

相关文章
|
8天前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
112 1
Redis-常用语法以及java互联实践案例
|
1月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
98 0
|
1月前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
2月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
121 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
121 1
|
2月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
64 0
|
3月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
813 2
|
3月前
|
存储 安全 Java
Java 基础知识面试题汇总 最全面的 Java 基础面试题整理
本文全面解析Java基础知识面试题,涵盖Java基础概念、面向对象编程、异常处理、集合框架等核心内容。通过实际应用场景,提供技术方案与应用实例,如JDK与JRE区别、==与equals()差异、String类特性、final与static关键字用法、多继承替代方案及接口与抽象类对比。帮助开发者夯实基础,高效备考,提升实战能力。附带完整代码示例,可供下载学习。
538 3
|
4月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
689 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
6月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
192 0