Java 数据类型及其判断

java判断数据类型(附完整源码) 阅读详情

一、Java 的两类数据类型

1.基本数据类型,也称原始数据类型

byte、short、char、int、long、float、double、boolean它们之间的比较,应该用双等号(==),比较的是它们的值。

2.引用数据类型

Java 所有的类都继承于Object这个基类的,其中定义了一个equals的方法,该方法的初始行为是比较变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
但在一些类库当中该方法被覆盖掉了,如 String、Integer、Date。在这些类当中 equals 有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于引用数据类型之间进行 equals 比较,在没有重写 equals 方法的情况下,它们之间的比较还是基于它们在内存中的存放位置的地址值的,因为 Object 的 equals 方法也是用双等号进行比较的,所以比较后的结果跟双等号的结果相同。

注意:

  1. 比较的是操作符两端的操作数是否是同一个对象。
  2. 两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
  3. 比较的是地址。如果是具体的阿拉伯数字的比较,值相等则为true,如:
    int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为它们都指向地址为10的堆。
  4. String s=“abc"是一种非常特殊的形式,和 new 有本质的区别。它是Java中唯一不需要new就可以产生对象的途径。以 String s=“abc”; 形式赋值在Java中叫直接量,它是在常量池中而不是象new一样放在压缩堆中。这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abc"的对象。如果有,就会把它赋给当前引用。即原来那个引用和现在这个引用指向了同一对象。如果没有,则在常量池中新创建一个"abc",下一次如果有 String s1 = “abc”; 又会将s1指向"abc"这个对象,即以这种形式声明的字符串,只要值相等,任何多个引用都指向同一对象。而 String s = new String(“abcd”); 和其它任何对象一样,每调用一次就产生一个对象,只要它们调用。
    也可以这么理解:
    String str = "hello";先在内存中找是否存在“hello”这个对象,如果有,就让str指向那个"hello"。如果没有,就创建一个新的对象保存“hello”。
    String str=new String ("hello")就是不管内存里有没有“hello”这个对象,都新建一个对象保存“hello”。

具体可以看下面的代码:

public static void main(String[] args) {
    String a1 = new String("a"); //a1 为一个引用
    String a2 = new String("a"); //a2 为另一个引用,对象的内容一样
    System.out.println("a1==a2:" + (a1 == a2));// false,非同一对象
    System.out.println("a1EQa2:" + a1.equals(a2));// true

    String a3 = "a"; //a3 为另一个引用,对象的内容一样
    System.out.println("a1==a3:" + (a1 == a3));// false,非同一对象
    System.out.println("a2==a3:" + (a2 == a3));// false,非同一对象
    System.out.println("a1EQa3:" + a1.equals(a3));// true

    String b1 = "b"; //放在常量池中
    String b2 = "b"; //从常量池中查找
    System.out.println("b1==b2:" + (b1 == b2));// true
    
    System.out.println("42 == 42.0:" + (42 == 42.0));// true
}

二、equals 和 == 的区别

equals 方法定义在基类 Object,源码:

public boolean equals(Object obj) {    
   return (this == obj);
}

由 equals 的源码可以看出这里定义的 equals 与双等号是等效的(Object类中的equals与双等号没什么区别)。不同的原因就在于有些类(像String、Integer等类)对 equals 进行了重写,但是没有对 equals 进行重写的类(比如自定义的类)就只能从 Object 类中继承 equals 方法,其 equals 方法与 == 就也是等效的,除非在此类中重写 equals。

对equals重新需要注意五点:
1️⃣自反性:对任意引用值X,x.equals(x)的返回值一定为true。
2️⃣对称性:对于任何引用值x、y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true。
3️⃣传递性:如果x.equals(y)=true,y.equals(z)=true,则x.equals(z)=true。
4️⃣一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变。
5️⃣非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。

String 类对 equals 的重写如下:

public boolean equals(Object var1) {
		if (this == var1) {
			return true;
		} else {
			if (var1 instanceof String) {
				String var2 = (String) var1;
				int var3 = this.value.length;
				if (var3 == var2.value.length) {
					char[] var4 = this.value;
					char[] var5 = var2.value;

					for (int var6 = 0; var3-- != 0; ++var6) {
						if (var4[var6] != var5[var6]) {
							return false;
						}
					}
					return true;
				}
			}
			return false;
		}
	}

另外,双等号比“equals”运行速度快,因为双等号“==”只是比较引用。

三、经典面试

如果Integer a = 3;Integer b = 3;那么【a==b】的结果是什么?-----true
如果Integer a = 273;Integer b = 273;那么【a==b】的结果是什么?-----false

原因:
对于Integer var = ?在 -128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用 == 进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,推荐使用 equals 方法进行判断。

数据科学常见模型总结(二)-倾向性得分匹配模型 PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。 阅读详情

相关推荐

远程桌面(RDP)共享USB设备全攻略:不止Hyper-V,你的加密狗和CH340串口也能远程用

本文详细介绍了远程桌面(RDP)共享USB设备的完整解决方案,包括加密狗和CH340串口设备的远程使用技巧。通过RemoteFX USB重定向技术,用户可以在远程会话中无缝使用本地USB设备,提升工作效率。文章涵盖企业级配置、典型设备实战案例及高级故障排除方法,是远程工作者的实用指南。

weixin_42522964的博客 332

java判断数据类型

1、基本数据类型。如byte、short、char、int、long、float、double、boolean,这些的比较用==。 2、对象数据类型。如Integer,String,List,Collection,Map。 (1)方法一:使用对象变量.getClass().getName(),如: String s = "jessica"; System.out.println(s.getClass().getName()); // 输出结果:java.

zhan_qian的博客 3万+

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

weixin_45355881的博客 4708

java怎么判断数据类型_Java 数据类型及其判断

一、Java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型:byte、short、char、int、long、float、double、boolean它们之间的比较,应该用双等号(==)比较的是它们的值。2.引用数据类型:JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较变量(栈)内存中存放的对象的(堆...

weixin_39649405的博客 1万+

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

AI漫剧制作全流程零基础实操指南:从剧本到剪辑

AI漫剧是一种利用AI工具将剧本、分镜、出图、配音、剪辑整合为流水线的短视频内容形式。其技术原理基于文生图、图生图与文本转语音模型的组合,核心挑战在于角色一致性控制与分镜批量出图。这项技术大幅降低了视频制作门槛,使个人创作者无需演员和设备即可产出剧情向短内容,广泛应用于短视频平台的情景剧、玄幻、甜宠等题材。本文给出了一套零基础可照做的全流程实操方案,覆盖剧本提示词、分镜表、出图选型、配音合成与剪辑模板,帮助你快速跑通AI漫剧制作链路。

weixin_29048309的博客 521

java数据类型的判断

java中的数据类型主要分为基本数据类型和对象数据类型两类。2.对于java中的对象数据类型的判断,一般有两种方法。

magic171的博客 3217

电感选型不当的代价:从纹波激增到系统失稳的深度剖析

本文深度剖析了电感选型不当对开关电源系统的严重影响。电感值过小会导致纹波电流激增、元件热应力加剧、EMI超标乃至MOSFET击穿;电感值过大则会引起环路响应迟滞、动态性能下降和轻载效率恶化。文章通过实测案例,强调了超越经典公式进行动态与容差考量的必要性,并提供了基于饱和电流、温升电流及环路测试的精准选型方法论,帮助工程师规避从纹波失控到系统失稳的潜在风险。

flink9streamer的博客 406

判断变量的数据类型的方法

关于判断数据类型的方法及函数

mz929的博客 1491

SAP 调用Ftp服务器

FTP(File transfer protocol)是一种标准的网络协议,可以用于在互联网上传递文件。SAP系统中可通过系列配置和提供的些标准函数,用于查看、更新、下载FTP服务器上的文件。提示:以下是本篇文章正文内容,下面案例可供参考。

qq_38304013的博客 1417

SAP 系统升级不再惧怕 SPAU 与 SPDD:把修改调整做成可控的工程

SAP系统升级中的SPAU/SPDD处理要点:首先明确SPDD处理数据字典对象,SPAU处理程序对象,核心是解决标准对象变更与历史修改的继承问题。关键原则是优先回归标准版本,减少后续升级负担。操作时应利用版本管理对比差异,批量处理可回退对象,并通过F9多选提高效率。对于提示"当前版本与建议一致"的对象直接回归标准。注意区分新旧SPAU界面功能差异,将Note下载移至SNOTE处理,并确保在SPDD/SPAU之后处理SPAU_ENH。最后,所有调整需记录日志并纳入传输请求,确保可追溯性。遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

java 判断object类型_JavaScript的数据类型及其检测

前言JavaScript有几种数据类型,如何检测数据类型?这是本文要讨论的话题,思维导图如下:一、JavaScript有几种类型的值?Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增,表示独一无二的值),而引用数据类型统称为Object对象,主要包...

weixin_39882589的博客 1201

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - 社交网络消息转发 (Java/Py/C/C++/Js/Go)

算法大师! 402

JAVA基础(五)-判断相等篇

一、前言 1、java八大基础数据类型:byte、short、int、long、float、double、boolean、char 2、java八大包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character 3、不可变类:对象实例化后不可改变成员变量值的类;       java自带不可变类:String、八大包装类   二、基...

LiuYiFan_TOT的博客 906

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基本数据类型及其包装类和美女选妃案例两种写法

1.java中基本数据类型

alexis333的博客 519

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java基础复习1--基本数据类型、运算符号、表达式语句与程序结构

JAVA基础知识的学习日记。

pmsheep82的专栏 5376

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Python速通2】python基本数据类型(基于Java语言的对比及扩展)

本文适合本科计算机语言的小伙伴扩展学习,尤其是已经有Java语言基础的同学去速通python,本文会着重区别两门语言的特点和相关之处。部分联想部分可能涉及C语言SQL语言(都是计算机底层语言的基础哇)

2301_81856296的博客 1284

Spring 工具类之基本元素判断

Spring 工具类之基本元素判断 实际业务开发中偶尔会遇到判断一个对象是否为基本数据类型,除了我们自老老实实的自己写之外,也可以借助 Spring 的 BeanUtils 工具类来实现 // Java基本数据类型及包装类型判断 org.springframework.util.ClassUtils#isPrimitiveOrWrapper // 扩展的基本类型判断 org.springframework.beans.BeanUtils#isSimpleProperty 这两个工具类的实现都比较清.

小灰灰blog的专栏 1404

java web判断是否为空_Java 判断实体对象及所有属性是否为空的操作

1、判断实体对象是否为空2、判断对象所有属性是否为空3、特别注意,实体类中如果有基本数据类型,会影响判断package com.liuxd.object;import org.apache.commons.lang3.StringUtils;import java.lang.reflect.Field;/*** Created by Liuxd on 2018/11/2.*/public clas...

weixin_30623181的博客 449

Java基础数据类型

自动类型转换是指当数据类型不一致时,Java 编译器会自动将低类型转换为高类型,例如将 int 类型转换为 long 类型、将 float 类型转换为 double 类型等。double:占用8个字节,取值范围为±(4.94065645841246544e-324~1.79769313486231570e+308)之间的浮点数。在这个示例中,将 int 类型的变量 a 强制转换为 byte 类型的变量 b,由于 byte 类型只有 8 位,所以在转换时可能会导致溢出和精度丢失。

fq74590的博客 263

浅谈Java基础数据类型

布尔型(boolean)

2301_80295141的博客 269

java数据类型

java数据类型与转换规则

m0_53387706的博客 139

java基本数据类型和比较string

1、字符串String属于引用数据类型。String是一个类。 java中字符串的比较:==比较引用,==是两边的完完全全是一致的,才返回true,否则返回false equal是判断两个对象中的内容是否一致。 判断值是否相等 String类的equals()源码如下: 2、字符串判空 3...

jiashanshan521的博客 942

java 相等比较_java 相等的比较,存在的判断

1.在Java中有8种基本数据类型:浮点型:float(4 byte), double(8 byte)整型:byte(1 byte), short(2 byte), int(4 byte), long(8 byte)字符型: char(2 byte)1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equ...

weixin_42160278的博客 447

java逻辑表达式的人值的类型_【Java基础】Java入门程序&基础数据类型(转换)&逻辑判断&运算等...

Java入门程序(HelloWorld)publicclassHelloWorld{publicstaticvoidmain(String[]args){//打印出一句HelloWorldSystem.out.println("HelloWorld!");}}Java 基础数据类型publicclassBasicDataType{/***8种基本数据类型*/priva...

weixin_36486217的博客 157

java判断对象无数据_Java 判断实体对象及所有属性是否为空的操作

1、判断实体对象是否为空2、判断对象所有属性是否为空3、特别注意,实体类中如果有基本数据类型,会影响判断package com.liuxd.object;import org.apache.commons.lang3.StringUtils;import java.lang.reflect.Field;/*** Created by Liuxd on 2018/11/2.*/public clas...

weixin_30047059的博客 2318
上一篇: 从 Java1 到 Java N
下一篇: Java 中的判空操作
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值