【前端学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。

相关文章
|
4月前
|
Java 开发者
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
149 0
|
22天前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
112 2
|
2月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
259 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
3天前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
11 0
|
4天前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
19 0
|
1月前
|
存储 安全 Java
Java 基础知识面试题汇总 最全面的 Java 基础面试题整理
本文全面解析Java基础知识面试题,涵盖Java基础概念、面向对象编程、异常处理、集合框架等核心内容。通过实际应用场景,提供技术方案与应用实例,如JDK与JRE区别、==与equals()差异、String类特性、final与static关键字用法、多继承替代方案及接口与抽象类对比。帮助开发者夯实基础,高效备考,提升实战能力。附带完整代码示例,可供下载学习。
131 3
|
4月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
4月前
|
设计模式 缓存 Java
重学Java基础篇—Java对象创建的7种核心方式详解
本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
210 3
|
4月前
|
安全 IDE Java
重学Java基础篇—Java泛型深度使用指南
本内容系统介绍了Java泛型的核心价值、用法及高级技巧。首先阐述了泛型在**类型安全**与**代码复用**中的平衡作用,解决强制类型转换错误等问题。接着详细讲解了泛型类定义、方法实现、类型参数约束(如边界限定和多重边界)、通配符应用(PECS原则)以及类型擦除的应对策略。此外,还展示了泛型在通用DAO接口、事件总线等实际场景的应用,并总结了命名规范、边界控制等最佳实践。最后探讨了扩展知识,如通过反射获取泛型参数类型。合理运用泛型可大幅提升代码健壮性和可维护性,建议结合IDE工具和单元测试优化使用。
88 1
|
4月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
127 1