Java SE 2.数据类型与变量

article/2025/6/16 3:26:56

Java是一门强类型语言,数据类型和变量是构建程序的基石。理解数据类型的选择和变量的定义方式,直接影响代码的性能和可读性。就一句话:数据类型和变量很重要!

1. 字面常量

我们刚接触Java时,曾写过一个简单的程序:


public class Main {public static void main(String[] args) {System.out.println("hello,world!");}
}//运行结果:
hello,world!

这里,无论程序何时运行,运行结果都是输出:hello,world!

其实这里的 hello,world! 就是字面常量。常量,即程序运行期间,固定不变的量。在现实生活中同样有常量,打个比方:一个小时60分钟,一天24小时。

通常,常量可以分为以下几类:

字符串常量:由""括起来的,比如:"123"、"hello"、"你好"等

整型常量:程序中直接写的数字(注:无小数点),比如:123、111、12等

浮点数常量:程序中直接写的小数:比如:1.2、3.14、5.2等

字符常量:由''括起来的单个字符,比如:'a'、'A'、'2'等

布尔常量:只有两种:true 和 false

空常量:null(后续篇幅介绍)

2. 数据类型

在Java中,数据类型主要分为两类:基本数据类型引用数据类型

 基本数据类型

基本数据类型简单概括为 四类八种

四类:整型、浮点型、字符型和布尔型

八种:用表格表示如下:

 注意

  • Java中,不论是在16位系统还是32位系统下,int 都占用4个字节,long 都占用8个字节。
  • 整型和浮点型都是带符号的(+ 和 -)
  • Java中,整型默认为 int,浮点型默认为 double。

 什么是字节?

字节是计算机中表示空间大小的基本单位,计算机使用二进制表示数据,我们认为8个二进制位(bit) 为一个字节(Byte)。我们平时的计算机为 8GB 内存,意思是 8G 个字节,其中:

1KB = 1024Byte,1MB = 1024KB,1GB = 1024MB。

 3. 变量

3.1 什么是变量?

在我们写的程序中,除了有始终不变的常量外,还有经常改变的内容,比如说:人的年龄、身高、体重等,对于这些经常改变的内容,在Java中,称之为变量。上述的数据类型就是用来定义不同种类变量的

 3.2 语法格式

定义一个变量的语法格式如下:

数据类型 变量名 = 初始值;

例如:


public class Test1 {public static void main(String[] args) {int a = 10;  //定义一个整型变量a,a是变量名也称为标识符,//该变量中储存的值为10double b = 3.14;char c = 'A';boolean d = true;System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);a = 100;    //因为a是变量,因此它的值可以修改,//= 在Java中表示赋值,右边的值给左边System.out.println(a);//注意:在一行可以定义多个相同类型的变量int a1 = 1,a2 = 2,a3 = 3;System.out.println(a1);System.out.println(a2);System.out.println(a3);}
}

3.3 变量定义需要注意的事项

当我们定义了一个变量时,通常要对它进行初始化,一般有两种方式:

方式1:在定义时给初始值,例如

int a = 10;

System.Out.println(a);

方式2:在定义时没有给初始值,但在使用时要给,不然编译器会报错。

int b;

b = 10;

System.Out.println(a);

 3.4 整型变量

 3.4.1 整型变量

在进入整型变量之前,先来介绍一下 包装类型包装类型简单来说就是把这个类型和围绕着这个类型的一些方法进行包装,然后对这个包装体进行命名,注意包装类型是引用类型。Java为所有的基本数据类型都提供了包装类型。

 整型 int 的为: Integer 。


public class Test2 {public static void main(String[] args) {//可以通过 包装类型. 的方式调用包装类型中的方法System.out.println(Integer.MAX_VALUE);  //调用这个方法,查看 int 的最大值System.out.println(Integer.MIN_VALUE);  //调用这个方法,查看 int 的最小值}
}//运行结果
2147483647
-2147483648

注意事项:

  1. 在定义 int 型变量时,所赋值不能超过 int 的范围。
  2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为0。

3.4.2 长整型变量

长整型 long 的包装类型为: Long 。


public class Test3 {public static void main(String[] args) {System.out.println(Long.MAX_VALUE);System.out.println(Long.MIN_VALUE);}
}//运行结果
9223372036854775807
-9223372036854775808

注意事项:

  1. 长整型变量的初始值后加 l 或 L ,推荐加 L。例如:long a = 100L;
  2. Java中,长整型不论在那个系统下都占8个字节。
  3. 在定义 long 型变量时,所赋值不能超过 long 的范围。

3.4.3 短整型变量

短整型 short 的包装类型为:Short 。


public class Test4 {public static void main(String[] args) {System.out.println(Short.MAX_VALUE);System.out.println(Short.MIN_VALUE);}
}//运行结果:
32767
-32768

注意事项:

  1. 在Java中,short在任何系统下都占2个字节。
  2. 在定义 short 型变量时,所赋值不能超过 short 的范围。

3.4.4 字节型变量

字节型 byte 的包装类型为:Byte 。


public class Test5 {public static void main(String[] args) {System.out.println(Byte.MAX_VALUE);System.out.println(Byte.MIN_VALUE);}
}//运行结果:
127
-128

注意事项:

  1. 在Java中,byte在任何系统下都占1个字节。
  2. 在定义 byte 型变量时,所赋值不能超过 byte 的范围。

3.5 浮点型变量

在Java中,int 除以 int 的值仍然是 int (会直接舍弃小数部分)。如果想要得到带有小数的结果,需要用到浮点型。


public class Test6 {public static void main(String[] args) {double num = 1.1;System.out.println(num * num);}
}//运行结果:
1.2100000000000002

3.5.1 双精度浮点型

双精度浮点型 double 的包装类型为:Double 。

注意事项:

  1. 在Java中,double在任何系统下都占8个字节。
  2. 浮点数与整数在内存中的存储方式不同,不能单纯使用的形式来计算。
  3. double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值

3.5.2 单精度浮点型

单精度浮点型 float 的包装类型为:Float 。

注意事项:

  1. 因为Java中浮点型默认为 double,因此在定义单精度浮点型变量初始化赋值时,需要在初始值后面加一个 F 或 f。例如 float num = 1.0F;
  2. float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准.。由于表示的数据精度范围较小,一般在工程上用到浮点数 都优先考虑 double,不太推荐使用 float。

3.6 字符型变量

字符型 char 的包装类型为:Character 。


public class Test {public static void main(String[] args) {char c1 = 'a';char c2 = 'A';System.out.println(c1);System.out.println(c2);//Java的字符可以是中文char c3 = '帅';System.out.println(c3);}
}//运行结果
a
A
帅

注意事项:

  1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值。
  2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此 一个字符占用两个字节, 表示的字符种类更多, 包括中文。
  3. 关于字符编码方式的讨论, 参见https://zhuanlan.zhihu.com/p/35172335

3.7 布尔型变量

布尔型 boolean 的包装类型为  Boolean 。

布尔类型常用来表示真假,例如太阳从西边出来,这是假的,不可能的;而太阳从东边出来,这是真的。

注意事项:

  1. 布尔型变量只有两种取值,要么真 true ,要么假 false 。
  2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
  3. Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle公司的虚拟机实现中,boolean占1个字节。

4.类型提升

在Java中,不同类型数据之间相互运算时,会把数据类型小的提升为数据类型大的。例如:

int a = 10;

long b = 100L;

long c = a + b; //编译成功:a + b 的结果的数据类型为 long,赋值给  long变量c,合理。

int c = a + b;   //编译失败:a + b 的结果的数据类型为 long,赋值给  int变量c,不合理。

注意事项:

  1. 不同类型的数据混合运算, 范围小的会提升成范围大的。
  2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算,即运算结果的数据类型为 int 。

5. 类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。

 在Java中,当参与运算的数据类型不一样时,就会进行类型转换,其中Java的类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。

5.1 自动类型转换

自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。例如:


public class Test {public static void main(String[] args) {int a = 10;long b = 100L;b = a;System.out.println(b);}
}//运行结果:
10

5.2 强制类型转换

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成,即需要我们手动设置。特点:数据范围大的到数据范围小的


public class Test {public static void main(String[] args) {int a = 10;long b = 100L;a = (int) b;  //这里进行了强制类型转换,()内表示要转换的类型System.out.println(a);}
}//运行结果
100

注意事项:

  1. 强制转换可能导致精度丢失(如浮点转整型)或数值溢出(如大整数转小整数)。
  2. 强制类型转换不一定能成功,不相干的类型不能互相转换。例如 int 和 boolean 。

6. 引用数据类型

Java为我们提供了很多种引用数据类型,比如说:类、接口、数组、String等等,这里暂且介绍          String。

 字符串类型 String

在Java中,我们通常用 String 定义字符串类型,比如:


public class Test {public static void main(String[] args) {String c1 = "hello ";String c2 = "world!";System.out.println(c1);System.out.println(c2);System.out.println(c1 + c2); //c1 + c2 表示将c1和c2进行拼接}
}//运行结果
hello 
world!
hello world!

字符串可以和整形数字之间进行转换:

1.int 转换为 String

int num = 10;

String str1 = num + "";   //方法一

String str2 = String.valueOf(num);  //方法二,使用 String 提供的方法。

2.String 转换为 int

String str = 100;

int num =  Integer.parseInt(str);  //使用 int 包装类型提供的方法。

到此,本篇文章完!至于其他的引用类型,将会在后续文章中介绍,对本篇文章如有异议,还请各位看官提出,您的批评就是对我最大的鼓励!谢谢!!! 


http://www.hkcw.cn/article/oWDfeXqnAM.shtml

相关文章

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

【前端】SPA v.s. MPA

链接:页面结构 误区 页面结构管理有两种常见方式:路由形式 和 组件形式。路由形式 对应MPA ,组件形式对应SPA ❌ 误区 1:路由形式 MPA❌ 路由是 SPA 和 MPA 共有的概念,区别在于路由映射的对象: MPA 的…

国米0-5创欧冠决赛最大分差 巴黎青春风暴横扫夺冠

在安联球场举行的欧冠决赛中,巴黎圣日耳曼以5比0横扫国际米兰,创造了欧冠决赛历史上的最大分差纪录。此前欧冠决赛的最大分差为四球,最近一次是1993-1994赛季AC米兰对巴萨的4比0。恩里克带领下的巴黎圣日耳曼首次赢得欧冠冠军,他们的表现令人震惊。比赛开始后不久,巴黎便迅…

樊振东加盟德甲 俱乐部披露幕后 签约过程震撼乒坛

FC萨尔布吕肯俱乐部宣布,奥运冠军樊振东将加盟球队。当樊振东在社交媒体上发布观看欧冠的照片时,另一条消息也震惊了乒乓球圈:他将在新赛季代表萨尔布吕肯出战德国乒乓球甲级联赛(TTBL)。俱乐部官方公告中提到,前世界排名第一的樊振东将在新赛季为萨尔布吕肯效力。这位28…

Yunxi期中

Misc 谍影重重plus(misc) 随波逐流修复伪加密 零宽字符解密,???需要爆破 import itertools import stringdef generate_symmetric_passwords():# 扩展字符集:大小写字母 数字 符号chars st…

2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测

目录 1.端午快乐2.摘要3.灰狼算法GWO原理4.改进策略5.结果展示6.参考文献7.代码获取8.读者交流 1.端午快乐 今天端午节,祝各位朋友端午安康,阖家平安! 2.摘要 无线传感器网络(WSNs)是一种被广泛应用的新兴技术&…

YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取

文章目录 引言GhostNetv2概述GhostNet回顾GhostNetv2创新 YOLOv8主干网络改进原YOLOv8主干分析GhostNetv2主干替换方案整体架构设计关键模块实现 完整主干网络实现YOLOv8集成与训练模型集成训练技巧 性能对比与分析计算复杂度对比优势分析 部署优化建议结论与展望 引言 目标检…

【Oracle】TCL语言

个人主页:Guiat 归属专栏:Oracle 文章目录 1. TCL概述1.1 什么是TCL?1.2 TCL的核心功能 2. 事务基础概念2.1 事务的ACID特性2.2 事务的生命周期 3. COMMIT语句详解3.1 COMMIT基础语法3.2 自动提交与手动提交3.3 提交性能优化 4. ROLLBACK语句…

设计模式——单例设计模式(创建型)

摘要 本文详细介绍了单例设计模式,包括其定义、结构、实现方法及适用场景。单例模式是一种创建型设计模式,确保一个类只有一个实例并提供全局访问点。其要点包括唯一性、私有构造函数、全局访问点和线程安全。文章还展示了单例设计模式的类图和时序图&a…

STM32F103C8T6,bxCAN收发配置实例,包含ID过滤

文章目录 引言bxCAN简介bxCAN主要特点代码示例引言 bxCAN简介 bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。 对于安全紧要的应…

使用 HTML + JavaScript 实现可拖拽的任务看板系统

本文将介绍如何使用 HTML、CSS 和 JavaScript 创建一个交互式任务看板系统。该系统支持拖拽任务、添加新任务以及动态创建列,适用于任务管理和团队协作场景。 效果演示 页面结构 HTML 部分主要包含三个默认的任务列(待办、进行中、已完成)和…

进程间通信II·命名管道

目录 原理 创建过程 特性 代码练习 客户端与服务端交互 小知识 原理 原理:两个进程各自的struct file 指向相同的inode和文件缓冲区(这里的inode和文件缓冲区也应用了引用计数)。 命名管道创建的是磁盘上的一种不刷新数据到缓冲区的常规…

Redis--缓存工具封装

经过前面的学习,发现缓存中的问题,无论是缓存穿透,缓存雪崩,还是缓存击穿,这些问题的解决方案业务代码逻辑都很复杂,我们也不应该每次都来重写这些逻辑,我们可以将其封装成工具。而在封装的时候…

ZC-OFDM雷达通信一体化减小PAPR——选择性映射法(SLM)

文章目录 前言一、SLM 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中,信号的传输由多个子载波协同完成,多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于其均…

ESP32-idf学习(四)esp32C3驱动lcd

一、前言 屏幕是人机交互的重要媒介,而且现在我们产品升级的趋势越来越高大尚,不少产品都会用lcd来做界面,而esp32c3在一些项目上是可以替代主mcu,所以驱动lcd也是必须学会的啦 我新买的这块st7789,突然发现是带触摸…

Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路

历时近一个半月,我中啦! RS是中科院二区,2023-2024影响因子4.2,五年影响因子4.9。 投稿前特意查了下预警,发现近五年都不在预警名单中,甚至最新中科院SCI分区(2025年3月)在各小类上…

ZC-OFDM雷达通信一体化减小PAPR——部分传输序列法(PTS)

文章目录 前言一、PTS 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中,信号的传输由多个子载波协同完成,多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于其均…

第6章 放大电路的反馈

本章基本要求 会判:判断电路中有无反馈及反馈的性质 会算:估算深度负反馈条件下的放大倍数 会引:根据需求引入合适的反馈 会判振消振:判断电路是否能稳定工作,会消除自激振荡。 6.1 反馈的概念及判断 一、反馈的…

知识管理五强对比:Baklib高效突围

Baklib核心技术优势 Baklib的底层技术架构以知识中台为核心,深度融合自然语言处理(NLP)与分布式存储技术,实现多源异构数据的统一纳管。其智能分类引擎通过语义理解自动关联碎片化文档,结合动态标签体系与多维度权限控…

电机驱动器辐射骚扰整改

定位低压DC部分的骚扰源(排除法): 为确定是电源哪部分出现问题,可以采取如下步骤进行验证: a.将12V转5V的芯片去掉,仅剩12V器件工作,然后测试; b.将5V转3.3V和隔离5V的芯片去掉&am…