【Java篇】数据类型与变量:窥见程序的天地万象

【Java篇】数据类型与变量:窥见程序的天地万象

文章目录

Java 数据类型与变量基础:从零开始,轻松掌握

💬 欢迎讨论:如果你在阅读过程中有任何疑问或想要进一步探讨的内容,欢迎在评论区留言!我们一起学习、一起成长。

👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏并分享给更多想了解 Java 编程的朋友!

🚀 继续学习之旅:今天,我们将从 Java 编程语言的核心基础开始,介绍数据类型变量,这些是每个学习 Java 的人都需要掌握的基本概念,后续我们将继续深入其他更高级的内容。

前言

在本篇文章中,我们将详细介绍 Java 中的数据类型变量。这些是 Java 编程的基石,掌握它们对于编写正确、高效的 Java 程序至关重要。

Java 是一种强类型语言,这意味着每个变量都必须指定类型,而数据类型决定了数据的存储方式、计算方法以及可能的值范围。通过本篇文章的学习,你将能够理解并掌握如何在 Java 中使用不同的数据类型,以及如何定义和操作变量。


一、字面常量

1.1 什么是字面常量?

字面常量是指程序中固定不变的值,通常是在程序中直接写入的。比如 "Hello World"1003.14'A'true 都是字面常量。字面常量的值在程序运行期间是不可改变的,它们在 Java 中是最常用的数据类型。

例如,在如下代码中:

System.out.println("Hello World");

"Hello World" 就是一个字符串字面常量,直接在程序中写明。

1.2 字面常量的分类

字面常量根据其数据类型的不同,可以分为以下几种:

1.2.1 字符串常量

字符串常量是由双引号括起来的字符序列,例如:

"12345","hello","你好"

这些常量可以是数字、字母或者特殊字符的组合,用于表示文本。

1.2.2 整形常量

整形常量指的是程序中直接写的整数值,它们没有小数点。例如:

100,1000,-50
1.2.3 浮点数常量

浮点数常量表示带有小数的数值。例如:

3.14,0.49,-1.23
1.2.4 字符常量

字符常量由单引号括起来,用于表示单个字符。例如:

'A','1','#'
1.2.5 布尔常量

布尔常量只有两个值:truefalse,它们用于表示逻辑判断中的真假值。例如:

true,false
1.2.6 空常量

空常量表示为空值的引用类型,Java 使用 null 来表示。例如:

null

1.3 字面常量与数据类型

Java 中的字面常量代表了不同的数据类型,它们属于基本数据类型。在 Java 中,常见的数据类型有整型、浮点型、字符型和布尔型等,而字面常量正是这些数据类型的具体实例。

在 Java 中,常见的基本数据类型有:

  • 整型:包括 byteshortintlong
  • 浮点型:包括 floatdouble
  • 字符型:char
  • 布尔型:boolean

二、Java 中的基本数据类型

Java 的基本数据类型分为四类八种,每种类型都有其特定的存储方式和取值范围。理解这些数据类型对于 Java 编程至关重要。

2.1 数据类型的分类

Java 中的数据类型主要分为两类:基本数据类型引用数据类型(后期讲解)。

Java 数据类型

数据类型关键字内存占用范围
字符型byte1 字节-128 ~ 127
短整型short2 字节-32768 ~ 32767
整型int4 字节-2^31 ~ 2^31 - 1
长整型long8 字节-2^63 ~ 2^63 - 1
单精度浮点数float4 字节有范围,一般不关注
双精度浮点数double8 字节有范围,一般不关注
字符型char2 字节0 ~ 65535
布尔型boolean没有明确规定true 和 false

注意:

  • 不是在16位系统还是32位系统int 在32位系统占用4个字节,long 都占8个字节。
  • 整型和浮点型都是带有符号的。
  • 整型默认是 int 类型,浮点型默认是 double
  • 字符串属于引用类型,后续会介绍。

什么是字节?

字节是计算机中表示空间大小的基本单位。

计算机使用二进制表示数据。我们认为 8 个二进制位(bit)为一个字节(Byte)。

我们平时的计算机为 8GB 内存,意思是 8G 个字节。

其中:

  • 1KB = 1024 Byte
  • 1MB = 1024 KB
  • 1GB = 1024 MB

所以 8GB 相当于 80 多亿个字节。

2.1.1 整型数据类型

整型数据类型用于表示没有小数的数字,Java 提供了以下四种整型数据类型:

  • byte:1 字节,范围从 -128 到 127。
  • short:2 字节,范围从 -32768 到 32767。
  • int:4 字节,范围从 -2^31 到 2^31 - 1。
  • long:8 字节,范围从 -2^63 到 2^63 - 1。
byte b =100;// byte 类型short s =32000;// short 类型int i =1000000;// int 类型long l =10000000000L;// long 类型,L 后缀表示 long
2.1.2 浮点型数据类型

浮点型数据类型用于表示带有小数的数字。Java 提供了以下两种浮点型数据类型:

  • float:4 字节,精度较低。
  • double:8 字节,精度较高,通常用于表示科学计算中的浮点数。
float f =3.14f;// float 类型double d =3.14159;// double 类型
2.1.3 字符型数据类型

字符型数据类型用于表示单个字符,char 类型在 Java 中占用 2 字节,表示 Unicode 编码的字符,可以表示全球几乎所有语言的字符,包括中文。

char c ='A';// 字符类型char ch ='1';// 字符类型
2.1.4 布尔型数据类型

布尔型用于表示逻辑值 truefalse,它在条件判断中广泛应用。布尔类型在 Java 中的占用大小未明确规定,但通常为 1 字节。

boolean isTrue =true;// 布尔类型boolean isFalse =false;// 布尔类型

三、Java 中的变量

3.1 变量定义

3.1.1 变量的定义与初始化

变量是在程序运行时用于存储数据的容器。在 Java 中,定义变量时需要指定数据类型以及变量的名称,可以在定义时进行初始化。Java 中的变量通常遵循以下格式进行定义:

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

例如:

int a =10;// 定义整型变量 a 并初始化为 10// 注意:在一行可以定义多个相同类型的变量int a1 = 10, a2 = 20, a3 = 30;System.Out.println(a1);System.Out.println(a2);System.Out.println(a3);

注意:Java 是强类型语言,因此在定义变量时,必须指定其数据类型,且变量只能存储与其数据类型兼容的数据。

3.1.2 变量的作用域

变量的作用域决定了它在程序中可以访问的范围。Java 中的变量作用域包括:

  • 局部变量:在方法或代码块内部定义,只在该方法或代码块内部有效。
  • 成员变量:在类中定义的变量,可以是实例变量或静态变量。
代码示例:
publicclassExample{int x =5;// 成员变量publicvoiddisplay(){int y =10;// 局部变量System.out.println(x);// 成员变量System.out.println(y);// 局部变量}}

在上面的例子中,x 是成员变量,作用域是整个类。而 y 是局部变量,作用域仅限于 display 方法。


3.2 整型变量

// 方法一:在定义时给出初始值int a =10;System.out.println(a);// 方法二:在定义时没有初始化值,但使用时必须设置初值int b; b =10;System.out.println(b);// 使用方法三:在一定之后,在使用前如果没有赋值,则编译期间会报错int c;System.out.println(c);// 编译报错,必须初始化 c =100;

int类型变量所能表示的范围

System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);

注意事项:

  • int 在任何系统下都只有 4 个字节。
  • 推荐使用方法一定义,如果没有合适的初始值,可以设置为 0。
  • 在写代码时留意编译器的提示,确保在使用前给变量赋初值。
  • int 类型也可以使用 Integer 类来表示。

3.3 长整型变量

int a =10;long b =10L;// long 定义的长整型变量long c =10L;// 为了区分 int 和 long 类型,一般建议:long 类型变量的初始值后加 Llong d =10;// 一般可以加上 L 与与 int 不好区分

long 类型变量所能表示的范围

System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);

注意事项

  1. 长整型变量的初始值后加 L,推荐加 L。
  2. 长整型不在所有系统下都占用 8 个字节。
  3. 长整型的表示范围:-2^632^63 - 1
  4. long 的包装类型为 Long

3.4 短整型变量

short a =10;System.out.println(a);

short 类型变量所能表示的范围

System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);

注意事项:

  1. short 在任何系统下都占 2 个字节。
  2. short 的表示范围:-3276832767
  3. short 用途较少,通常不常使用。

3.5 字节型变量

byte b =10;System.out.println(b);

byte 类型变量所能表示的范围:

System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);

注意事项:

  1. byte 在任何系统下都占 1 个字节。
  2. byte 的表示范围是:-128127
  3. byte 的包装类型为 Byte

3.6 浮点型变量

3.6.1 双精度浮点型
double d =3.14;System.out.println(d);// 输出 3.14

神奇的代码1

int a =1;int b =2;System.out.println(a / b);// 输出 0.5 吗?

在 Java 中,int 除以 int 的值仍是 int(会直接舍弃小数部分)。如果想得到 0.5,需使用 double 类型计算。

double a =1.0;double b =2.0;System.out.println(a / b);// 输出 0.5

神奇的代码2

double num =1.1;System.out.println(num * num);// 输出 1.21 吗?

执行结果:

1.2100000000000002

注意事项:

  1. double 在任何系统下都占 8 个字节。
  2. 浮点数与整数的存储方式不同,不能单纯使用 int 类型来进行计算。
  3. double 的包装类型为 Double
  4. double 类型的内存遵循 IEEE 754 标准,具有一定的精度问题。

3.6.2 单精度浮点型
float num =1.0f;System.out.println(num);// 输出 1.0F 也可以

注意事项:

  • float 类型占 4 个字节。
  • 推荐使用 double 类型,因为 double 的精度范围更大。

3.7 字符型变量

char c1 ='a';// 小写字母char c2 ='A';// 大写字母System.out.println(c1);System.out.println(c2);

字符输出

char c3 =' ';// 空格System.out.println(c3);

注意事项:

  1. Java 中使用单引号 ' 表示单个字符的形式表示字符面值。
  2. 在计算机中,字符本质上是一个数字。在 C 语言中使用 ASCII 字符,而 Java 中使用 Unicode 字符集,一个字符占用两个字节,Unicode 可以表示更多的字符类型,包括中文。
  3. 字符的包装类型为 Character

3.8 布尔型变量

boolean b =true;System.out.println(b); b =false;System.out.println(b);

注意事项:

  1. boolean 类型的变量只有两种取值,true 表示真,false 表示假。
  2. Java 的 boolean 类型和 int 不能相互转换,不存在 1 表示 true0 表示 false 这样的用法。
boolean value =true;System.out.println(value +1);// 代码编译会出现错误

错误示例

Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误 System.out.println(value +1);^ 第一个类型:boolean 第二个类型:int1 个错误 
  1. Java 虚拟机规范中,并没有明确规定 boolean 占几个字节,也没有专门用来处理 boolean 的字节码指令,在 Oracle 公司的虚拟机实现中,boolean 占 1 个字节。
  2. boolean 的包装类型为 Boolean

四、数据类型转换

Java 中支持两种类型转换方式:自动类型转换和强制类型转换。

4.1 自动类型转换

自动类型转换是指 Java 会自动将较小范围的类型转换为较大范围的类型。例如,int 可以自动转换为 longfloat 可以自动转换为 double

代码示例

int a =10;long b = a;// 自动类型转换,int 转为 long

4.2 强制类型转换

强制类型转换是将较大范围的类型强制转换为较小范围的类型。这种转换需要显式地进行,并且可能会丢失数据。

代码示例:

double d =3.14;int i =(int) d;// 强制类型转换,丢失小数部分

注意:强制类型转换时,如果目标类型的范围无法表示源类型的值,可能会发生数据丢失或溢出。

4.3 其他类型转换

除了常见的整数与浮点数之间的转换,Java 还提供了字符串与数字类型的转换

代码示例:

1. int 转 String

int num =10;String str1 = num +"";// 方法1:直接使用字符串拼接String str2 =String.valueOf(num);// 方法2:使用 String.valueOf()

2. String 转 int

String str ="100";int num =Integer.parseInt(str);// 将 String 转换为 int

说明:
这里字符串转换进行了简要介绍,大家可以根据需要正常使用,后续章节会详细介绍。


4.4 数值类型的精度问题

4.4.1 浮点数的精度

由于浮点数采用二进制近似存储,有时会出现精度问题。特别是在进行数学运算时,浮点数结果可能会有微小的误差。

double num =1.1+2.2;System.out.println(num);// 输出 3.3000000000000003

解决方法:在计算结果时,可以使用 BigDecimal 来保证精确的浮点数运算。

BigDecimal bd =newBigDecimal("1.1"); bd = bd.add(newBigDecimal("2.2"));System.out.println(bd);// 输出 3.3
4.4.2 类型范围与溢出

Java 中每种数据类型都有其最大值和最小值。如果一个变量超出了它所能表示的范围,就会发生溢出。对于整数类型,溢出会导致数值循环回到最小值或最大值。

代码示例:

int maxInt =Integer.MAX_VALUE;// 2147483647System.out.println(maxInt +1);// 结果会溢出,输出为 -2147483648

五、类型提升

不同类型的数字之间相互运算时,数据类型小的会被提升到数据类型大的。

5.1 int 与 long 之间的运算

int a =10;long b =20;int c = a + b;// 编译错误,a + b 需要转换成 longlong d = a + b;// 正确的操作

说明:
intlong 进行运算时,int 会被提升为 long 类型,因为 long 类型的范围比 int 更大,所以结果会变为 long 类型。

5.2 byte 与 byte 的运算

byte a =10;byte b =20;byte c = a + b;// 编译错误,a + b 会提升为 int 类型System.out.println(c);// 错误,编译不通过

结论:
bytebyte 是相同类型,但会在运算时提升为 int 类型,因为 CPU 通常按 4 字节来处理。为了避免类型转换错误,可以先将结果转回 byte 类型。

byte a =10;byte b =20;byte c =(byte)(a + b);// 强制转换为 byte 类型System.out.println(c);// 正确

结论说明:
bytebyte 运算会被提升为 int 类型,然后再转换回 byte才能赋值给c


五、总结与展望

本文详细介绍了 Java 中的字面常量基本数据类型变量的定义与使用方法,并探讨了类型转换和类型提升等机制,可以发现相较于C语言Java在这些细节的处理更加周到,更为安全,并规范化变量的内存占用大小,这些对于Java语言的可移植性有很大的提升。掌握这些基础知识后,你将能够轻松地在 Java 中定义和操作数据类型,为后续深入学习其他 Java 相关知识奠定坚实的基础。

在接下来的文章中,我们将继续深入探讨控制结构面向对象编程等更高级的内容,帮助你更好地掌握 Java 编程。如果你对本篇文章有任何疑问,欢迎在评论区留言,我们一起讨论、一起进步!


以上就是关于【Java篇】数据类型与变量:窥见程序的天地万象内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

在这里插入图片描述

Read more

[DeepSeek] 入门详细指南(上)

[DeepSeek] 入门详细指南(上)

前言 今天的是 zty 写DeepSeek的第1篇文章,这个系列我也不知道能更多久,大约是一周一更吧,然后跟C++的知识详解换着更。 来冲个100赞兄弟们 最近啊,浙江出现了一匹AI界的黑马——DeepSeek。这个名字可能对很多人来说还比较陌生,但它已经在全球范围内引发了巨大的关注,甚至让一些科技巨头感到了压力。简单来说这 DeepSeek足以改变世界格局                                                   先   赞   后   看    养   成   习   惯  众所周知,一篇文章需要一个头图                                                   先   赞   后   看    养   成   习   惯   上面那行字怎么读呢,让大家来跟我一起读一遍吧,先~赞~后~看~养~成~习~惯~ 想要 DeepSeek从入门到精通.pdf 文件的加这个企鹅群:953793685(

By Ne0inhk
DeepFace深度学习库+OpenCV实现——情绪分析器

DeepFace深度学习库+OpenCV实现——情绪分析器

目录 应用场景 实现组件 1. 硬件组件 2. 软件库与依赖 3. 功能模块 代码详解(实现思路) 导入必要的库 打开摄像头并初始化变量 主循环 FPS计算 情绪分析及结果展示 显示FPS和图像 退出条件 编辑 完整代码 效果展示 自然的 开心的 伤心的 恐惧的 惊讶的  效果展示 自然的 开心的 伤心的 恐惧的 惊讶的   应用场景         应用场景比较广泛,尤其是在需要了解和分析人类情感反应的场合。: 1. 心理健康评估:在心理健康领域,可以通过长期监控和分析一个人的情绪变化来辅助医生进行诊断或治疗效果评估。 2. 用户体验研究:在产品设计、广告制作或网站开发过程中,通过观察用户在使用过程中的情绪反应,来优化产品的用户体验。 3. 互动娱乐:在游戏或虚拟现实应用中,根据玩家的情绪状态动态调整游戏难度或故事情节,以增加沉浸感和互动性。

By Ne0inhk
最全java面试题及答案(208道)

最全java面试题及答案(208道)

本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? * JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java

By Ne0inhk
10分钟打造专属AI助手!ToDesk云电脑/顺网云/海马云操作DeepSeek哪家强?

10分钟打造专属AI助手!ToDesk云电脑/顺网云/海马云操作DeepSeek哪家强?

文章目录 * 一、引言 * 云计算平台概览 * ToDesk云电脑:随时随地用上高性能电脑 * 二 .云电脑初体验 * DeekSeek介绍 * 版本参数与特点 * 任务类型表现 * 1、ToDesk云电脑 * 2、顺网云电脑 * 3、海马云电脑 * 三、DeekSeek本地化实操和AIGC应用 * 1. ToDesk云电脑 * 2. 海马云电脑 * 3、顺网云电脑 * 四、结语 * 总结:云电脑如何选择? 一、引言 DeepSeek这些大模型让 AI 开发变得越来越有趣,但真要跑起来,可没那么简单! * 本地配置太麻烦:显卡不够、驱动难装、环境冲突,光是折腾这些就让人心态崩了。 * 云端性能参差不齐:选错云电脑,可能卡到爆、加载慢,还容易掉线,搞得效率直线下降。 * 成本难控:有的平台按小时计费,价格一会儿一个样,

By Ne0inhk