【前端学java】复习巩固-Java中的对象比较(14)

往期回顾:

  • 【前端学java】JAVA开发的依赖安装与环境配置 (0)
  • 【前端学 java】java的基础语法(1)
  • 【前端学java】JAVA中的packge与import(2)
  • 【前端学java】面向对象编程基础-类的使用 (3)
  • 【前端学java】类中的访问权限详解,通俗易懂(4)
  • 【前端学java】java中final修饰符(5)
  • 【前端学java】全网最通俗易懂的JAVA抽象概念(6)
  • 【前端学java】Java中的接口和枚举概念(7)
  • 【前端学java】java中的Object类(8)
  • 【前端学java】java 中的数组(9)
  • 【前端学java】java中的字符串操作(10)
  • 【前端学java】java中的包装类(11)
  • 【前端学java】java中的日期操作(12)
  • 【前端学java】语法练习-工具类的封装 (13)

集美们,冲啊,这个系列马上完结了!接下来就是java高级篇、JDBC篇、框架篇了!

基础知识巩固

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

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

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

  • java中的 单引号 表示字符,一般是char类型的;java中的 双引号 是字符串,是String类型的。
  • 在Java中, === 符号并 不存在 、也 没有undefined 这个概念
  • Java使用 == 操作符来比较两个值是否相等,当比较两个基本数据类型(如 int、char、double 等时, == 操作符的效果是相同的
  • 在比较 两个对象 的内容是否相等时, 不能使用 == 操作符 !在Java中,对象比较的是它们的引用,而不是它们的值。在这种情况下,你应该使用 *******.equals() *******方法来比较两个对象的内容
  • java中,数据类型主要分为基本数据类型和引用数据类型
基本数据类型引用数据类型
整形(整数)byte、short、int、longString表示字符串
浮点型数据类型(小数)float、doubleArray表示数组
字符型数据类型charClass表示类类型
布尔型数据类型booleanInterface、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内部看看就明白了

通过代码,我们可以知道,其内部实际就是还是调用了"=="运算符,自然结果还是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);  // falseInteger c = 100;Integer d = 100;System.out.println(c == d);  // true}

结果似乎和我们想想的不一样,这是为什么呢?

原来,对于Integer类,Java会自动缓存-128到127之间的值,也就是说,如果创建的Integer对象的值在这个范围内,那么它们会被自动缓存为同一个对象。所以,当a和b的值都在这个范围内时,a == b的结果为true。

然而,当c和d的值超过这个范围时,Java不会为这些对象进行缓存。所以,尽管它们的值相同,但是因为它们不是同一个对象,所以c == d的结果为false。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/201472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2017 级考研管理类联考数学真题解析一、问题求解(本大题共 5 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2017-…

No appropriate protocol -- Mysql

DataGrip连接mysql报以下异常信息: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后,cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功(有版本号就行了) 2、选择npm镜像(npm config set registry https://registry.npm.taobao.org&…

Docker发布简单springboot项目

Docker发布简单springboot项目 在IDEA工具中直接编写Dockerfile文件 FROM java:8COPY *.jar /app.jarCMD ["--server.prot 8080"]EXPOSE 8080ENTRYPOINT ["java", "-jar", "/app.jar"]将项目打包成对应的jar包,将Dockerf…

6.Gin 路由详解 - GET POST 请求以及参数获取示例

6.Gin 路由详解 - GET POST 请求以及参数获取示例 GET POST 请求以及参数获取示例 Get 请求:获取 Quary 参数 // 获取query参数示例:GET /user?uid20&namejack&page1 r.GET("/user", func(c *gin.Context) {// 获取参数// Query获取参…

多选按钮关联多个el-checkbox-group

需求: 如图设计稿,全部企业成员下面的数据来源与两个接口,点击全部企业成员需要勾选全部,下面选中全部企业成员要是选中状态,所以需要两个数组变量,两个el-checkbox-group来控制;有人可能会疑问…

你不知道的库:库的种类,作用和加载方式

你不知道的库:库的种类,作用和加载方式 📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客…

使用 Redis BitMap 实现签到与查询历史签到以及签到统计功能(SpringBoot环境)

目录 一、前言二、Redis BitMap 位图原理2.1、BitMap 能解决什么2.2、BitMap 存储空间计算2.3、BitMap 存在问题 三、Redis BitMap 操作基本语法和原生实现签到3.1、基本语法3.2、Redis BitMap 实现签到操作指令 四、SpringBoot 使用 Redis BitMap 实现签到与统计功能4.1、代码…

前端CSS实现响应式TimeLine效果(附源码)

文章目录 纯CSS搭建,先上效果图(附有源码)视图层 index.htmlindex.css 公用样式文件Main.css 主要的样式文件 纯CSS搭建,先上效果图(附有源码) 本效果为纯CSS搭建,适配移动端和PC端&#xff01…

MySQL 事务的底层原理和 MVCC(二)

7.2. undo 日志 7.2.1. 事务回滚的需求 我们说过事务需要保证原子性,也就是事务中的操作要么全部完成,要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况,比如: 情况一:事务执行过程中可能遇到各种错误&a…

力扣C++学习笔记——C++ 给vector去重

要使用std::set对std::vector进行去重操作,您可以将向量中的元素插入到集合中,因为std::set会自动去除重复元素。然后,您可以将集合中的元素重新存回向量中。以下是一个示例代码,演示如何使用std::set对std::vector进行去重&#…

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组(一)数组的定义(二)二维数组(三)多维数组的存储(四)多维数组的下标的相关计算 二、矩阵(一)特殊矩阵和稀疏矩阵(二)…

opengl制作天空盒

首先创建顶点数组 unsigned int m_uiVaoBufferID; glGenVertexArrays(1, &m_uiVaoBufferID); 然后创建顶点缓冲区 float skyboxVertices[] {// positions-1.0f, 1.0f, -1.0f,-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, 1.0f, -1.0f,-1.0f, 1.…

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于晶体结构优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Android Studio 安装及使用

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

基于一致性算法的微电网分布式控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 本模型主要是基于一致性理论的自适应虚拟阻抗、二次电压补偿以及二次频率补偿,实现功率均分,保证电压以及频率稳定性。 一致性算法 分布式一致性控制主要分为两类:协调同…

深度学习之生成唐诗案例(Pytorch版)

主要思路: 对于唐诗生成来说,我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首, 首先数据预处理,将唐诗加载到内存,生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…

基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码

基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于材料生成优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

矩阵知识补充

正交矩阵 定义: 正交矩阵是一种满足 A T A E A^{T}AE ATAE的方阵 正交矩阵具有以下几个重要性质: A的逆等于A的转置,即 A − 1 A T A^{-1}A^{T} A−1AT**A的行列式的绝对值等于1,即 ∣ d e t ( A ) ∣ 1 |det(A)|1 ∣det(A)∣…

【开源】基于Vue.js的教学过程管理系统

项目编号: S 054 ,文末获取源码。 \color{red}{项目编号:S054,文末获取源码。} 项目编号:S054,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…