目录
写在前面
一、认识常量:程序中不变的那些事
二、数据类型:给数据贴上标签
基本数据类型一览表
三、变量:数据的容器
变量的定义和使用
使用变量的三个原则
四、深入理解各数据类型
4.1 整型家族:四种选择,各有千秋
4.2 浮点型:精度的代价
4.3 字符型:不仅仅是英文字母
4.4 布尔型:非真即假
五、类型转换:数据变形记
自动类型转换(隐式转换)
强制类型转换(显式转换)
类型提升:运算中的隐形规则
六、字符串:最特殊的引用类型
总结与练习
动手试一试
写在前面
上一篇文章我们完成了第一个Java程序的编写,理解了Java程序的基本结构。今天,我们将深入探讨编程中最基础也最重要的概念——数据类型与变量。如果把编程比作盖房子,数据类型就是砖块和水泥的种类,变量则是存放建筑材料的仓库。掌握了它们,你就真正踏入了Java编程的大门。
一、认识常量:程序中不变的那些事
在编写程序时,我们会遇到两类数据:一类始终不变,另一类随时可能变化。前者我们称之为常量,后者则是变量。
还记得我们的Hello World程序吗?System.out.println("Hello World")中的"Hello World"就是一个典型的常量——不管程序运行多少次,它都不会改变。
常量可以分为以下几种:
常量类型 | 示例 | 说明 |
|---|---|---|
字符串常量 | "你好"、"12345" | 用双引号包裹 |
整型常量 | 100、-50 | 不带小数点的数字 |
浮点数常量 | 3.14、0.618 | 带小数点的数字 |
字符常量 | 'A'、'好' | 用单引号包裹的单个字符 |
布尔常量 | true、false | 只有这两个值 |
空常量 | null | 表示"什么都没有" |
这些常量的类型,恰恰对应了Java中的数据类型。理解这一点,我们就找到了通往下一个知识点的桥梁。
二、数据类型:给数据贴上标签
Java是一门强类型语言,这意味着每一个数据都必须有明确的类型。类型决定了数据能取什么值、能做什么运算、占多少内存。
Java的数据类型分为两大类:
数据类型 ├── 基本数据类型(四类八种) │ ├── 整型:byte、short、int、long │ ├── 浮点型:float、double │ ├── 字符型:char │ └── 布尔型:boolean └── 引用数据类型(如:String、数组、类等)基本数据类型一览表
类型 | 关键字 | 占用空间 | 取值范围 |
|---|---|---|---|
字节型 | byte | 1字节 | -128 ~ 127 |
短整型 | short | 2字节 | -32768 ~ 32767 |
整型 | int | 4字节 | 约-21亿 ~ 21亿 |
长整型 | long | 8字节 | 极大范围 |
单精度浮点 | float | 4字节 | 精度较低 |
双精度浮点 | double | 8字节 | 精度较高 |
字符型 | char | 2字节 | 0 ~ 65535 |
布尔型 | boolean | 未明确规定 | true / false |
一个重要的设计理念:Java在设计时就保证了基本数据类型的大小与平台无关。无论在Windows、Linux还是Mac上,int永远是4个字节,long永远是8个字节。这为实现"一次编写,到处运行"奠定了基础。
三、变量:数据的容器
如果说常量是固定不变的值,那么变量就是可以变化的存储单元。你可以把它想象成一个盒子——盒子上贴了标签(变量名),规定了它能装什么东西(数据类型),而里面的东西(值)可以随时替换。
变量的定义和使用
// 基本语法:数据类型 变量名 = 初始值; int age = 22; // 定义一个整型变量age,值为22 double height = 1.78; // 定义一个浮点型变量height char gender = '男'; // 定义一个字符型变量gender boolean isStudent = true; // 定义一个布尔型变量isStudent // 变量的值可以修改 age = 23; // 现在age的值变成了23 // 一行定义多个同类型变量 int x = 10, y = 20, z = 30;使用变量的三个原则
先声明,后使用:变量必须先定义才能使用
使用前必须赋值:即使定义时没给值,使用前也必须赋值,否则编译报错
值不能超出类型范围:给int变量赋值12345678901234会编译失败
四、深入理解各数据类型
4.1 整型家族:四种选择,各有千秋
为什么Java要提供四种整型?这就像买衣服有不同的尺码——选择合适的尺寸既合身又不浪费。
byte:1字节,适合节省内存的场景,比如处理大量二进制数据
short:2字节,用得较少
int:4字节,日常开发最常用的整型
long:8字节,需要表示很大数值时使用
特别提醒:定义long类型变量时,建议在数值后加L(大写):
long bigNumber = 10000000000L; // 不加L会编译报错4.2 浮点型:精度的代价
浮点数用于表示小数,但有一个重要特点需要牢记:浮点数不是精确值,而是近似值。
试试这段代码:
double num = 1.1; System.out.println(num * num); // 你猜输出什么?结果是1.2100000000000002,而不是预期的1.21。这是因为计算机用有限的二进制位来表示无限的小数,必然存在精度误差。
在实际开发中,如果需要精确计算(比如金额),应该使用BigDecimal类,而不是浮点数。
4.3 字符型:不仅仅是英文字母
Java的char类型使用Unicode编码,占用2个字节,这意味着它可以表示包括中文在内的几乎所有文字:
char ch1 = 'A'; char ch2 = '好'; // Java中没问题! char ch3 = 20013; // 也可以用数字表示字符4.4 布尔型:非真即假
布尔类型只有两个值:true和false。值得注意的是,Java的布尔类型不能与整数互转——你不能用1表示true,也不能用0表示false。
五、类型转换:数据变形记
在实际编程中,不同类型的数据经常需要相互转换。Java提供了两种转换方式。
自动类型转换(隐式转换)
当小范围类型向大范围类型转换时,Java会自动完成:
int a = 10; long b = a; // 自动转换,没问题转换路线:byte → short → int → long → float → double
强制类型转换(显式转换)
当大范围类型向小范围类型转换时,需要手动强制转换:
long a = 100L; int b = (int)a; // 需要强制转换,可能丢失数据强制转换就像把大象塞进冰箱——虽然能做到,但可能损失一些数据。
类型提升:运算中的隐形规则
当不同类型的数据进行运算时,小类型会自动提升为大类型:
int a = 10; long b = 20; long result = a + b; // a先提升为long,再运算 byte x = 10; byte y = 20; byte sum = (byte)(x + y); // 必须强转!因为x+y的结果是int一个重要规则:byte、short、char参与运算时,会先提升为int。
六、字符串:最特殊的引用类型
String是Java中使用频率最高的引用类型,它不属于基本数据类型。字符串用双引号包裹,可以进行拼接操作:
String name = "小明"; String greeting = "你好," + name + "!"; // 输出:你好,小明!字符串与数字之间的转换也很常用:
// 数字转字符串 int num = 42; String str1 = num + ""; // 方式一 String str2 = String.valueOf(num); // 方式二 // 字符串转数字 String str = "100"; int num2 = Integer.parseInt(str);总结与练习
今天我们学习了Java编程中最重要的基础概念:
常量:程序中不变的值
数据类型:基本类型(四类八种)和引用类型
变量:存储可变数据的容器
类型转换:自动转换、强制转换和类型提升
动手试一试
试着写出以下代码的输出结果:
int a = 5; int b = 2; System.out.println(a / b); // 输出? System.out.println((double)a / b); // 输出? byte c = 100; byte d = 28; byte e = (byte)(c + d); System.out.println(e); // 输出?(提示:128超出了byte范围)下一篇文章,我们将学习Java中的运算符和表达式,敬请期待!