Java从零到熟练(二):变量、数据类型与运算符
数据是程序的血液,变量是存储数据的容器,运算符是处理数据的工具。
目录
1. 变量与数据类型
1.1 什么是变量?
变量是程序中用于存储数据的命名空间。可以把变量想象成一个盒子,盒子上贴着标签(变量名),盒子里装着东西(数据)。
变量的三要素:
- 变量名:标识符,用于引用变量
- 数据类型:决定存储什么类型的数据
- 变量值:实际存储的数据
1.2 变量声明与赋值
声明变量的语法:
数据类型 变量名;
声明并赋值:
数据类型 变量名 = 值;
示例:
public class VariableDemo {
public static void main(String[] args) {
// 声明变量
int age;
String name;
// 赋值
age = 20;
name = "张三";
// 声明并赋值
double score = 95.5;
boolean isStudent = true;
// 输出变量值
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("成绩:" + score);
System.out.println("是否学生:" + isStudent);
}
}
输出:
姓名:张三
年龄:20
成绩:95.5
是否学生:true
1.3 命名规则
必须遵守:
- 以字母、下划线
_或美元符$开头 - 只能包含字母、数字、下划线、美元符
- 不能使用Java关键字(如
int、class、public) - 区分大小写(
name和Name是不同变量)
推荐规范:
- 使用有意义的名称(
age而非a) - 驼峰命名法:变量名首字母小写,后面单词首字母大写
- 常量使用全大写:
MAX_SIZE
2. 基本数据类型
Java有8种基本数据类型,分为四类:
2.1 整数类型
| 类型 | 字节 | 范围 | 示例 |
|---|---|---|---|
byte |
1字节 | -128 ~ 127 | byte b = 100; |
short |
2字节 | -32768 ~ 32767 | short s = 30000; |
int |
4字节 | -2^31 ~ 2^31-1 | int i = 100000; |
long |
8字节 | -2^63 ~ 2^63-1 | long l = 10000000000L; |
注意: long 类型字面量需要加 L 后缀。
public class IntegerDemo {
public static void main(String[] args) {
byte temperature = 35;
short population = 140000;
int distance = 1500000;
long earthPopulation = 8000000000L;
System.out.println("温度:" + temperature);
System.out.println("人口(万):" + population);
System.out.println("距离(米):" + distance);
System.out.println("地球人口:" + earthPopulation);
}
}
2.2 浮点类型
| 类型 | 字节 | 精度 | 示例 |
|---|---|---|---|
float |
4字节 | 6-7位有效数字 | float f = 3.14f; |
double |
8字节 | 15-16位有效数字 | double d = 3.14159265; |
注意: float 类型字面量需要加 f 后缀。
public class FloatDemo {
public static void main(String[] args) {
float pi = 3.14f;
double e = 2.718281828459045;
double price = 99.99;
System.out.println("π ≈ " + pi);
System.out.println("e ≈ " + e);
System.out.println("价格:" + price);
// 精度问题演示
float f1 = 0.1f;
double d1 = 0.1;
System.out.println("float 0.1 == double 0.1? " + (f1 == d1));
}
}
输出:
π ≈ 3.14
e ≈ 2.718281828459045
价格:99.99
float 0.1 == double 0.1? false
重要: 浮点数存在精度问题,金融计算应使用 BigDecimal。
2.3 字符类型
char 类型占用2字节,存储单个字符,使用单引号:
public class CharDemo {
public static void main(String[] args) {
char grade = 'A';
char chinese = '中'; // 支持中文
char emoji = '😀'; // 支持emoji
System.out.println("等级:" + grade);
System.out.println("中文字符:" + chinese);
System.out.println("Emoji:" + emoji);
// 字符本质是数字(ASCII/Unicode)
System.out.println("A的Unicode值:" + (int) grade);
System.out.println("65对应的字符:" + (char) 65);
}
}
2.4 布尔类型
boolean 类型只有两个值:true 和 false:
public class BooleanDemo {
public static void main(String[] args) {
boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println("Java有趣吗?" + isJavaFun);
System.out.println("鱼好吃吗?" + isFishTasty);
// 常用于条件判断
int age = 18;
boolean isAdult = age >= 18;
System.out.println("是否成年:" + isAdult);
}
}
3. 类型转换
3.1 自动类型转换(隐式转换)
小范围类型可以自动转换为大范围类型:
public class AutoConversion {
public static void main(String[] args) {
byte b = 10;
int i = b; // byte → int(自动)
long l = i; // int → long(自动)
double d = l; // long → double(自动)
System.out.println("byte: " + b);
System.out.println("int: " + i);
System.out.println("long: " + l);
System.out.println("double: " + d);
}
}
3.2 强制类型转换(显式转换)
大范围类型转换为小范围类型,需要强制转换:
public class ExplicitConversion {
public static void main(String[] args) {
double d = 3.99;
int i = (int) d; // 强制转换,截断小数部分
System.out.println("double: " + d);
System.out.println("int: " + i); // 输出3,不是4
// 数据丢失演示
int big = 130;
byte small = (byte) big; // 溢出
System.out.println("int: " + big);
System.out.println("byte: " + small); // 输出-126
}
}
警告: 强制类型转换可能导致数据丢失或溢出,务必谨慎使用。
4. 运算符
运算符用于对变量和值执行操作。Java提供了多种运算符:
4.1 算术运算符
用于基本的数学运算:
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 5 / 3 |
1(整数除法) |
% |
取余 | 5 % 3 |
2 |
++ |
自增 | i++ |
i先使用,再加1 |
-- |
自减 | i-- |
i先使用,再减1 |
public class ArithmeticDemo {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3(整数除法)
System.out.println("a % b = " + (a % b)); // 1
// 浮点除法
double d1 = 10.0;
double d2 = 3.0;
System.out.println("10.0 / 3.0 = " + (d1 / d2)); // 3.3333...
// 自增自减
int x = 5;
System.out.println("x++ = " + (x++)); // 先输出5,x变为6
System.out.println("++x = " + (++x)); // x先变为7,输出7
}
}
4.2 赋值运算符
| 运算符 | 描述 | 示例 | 等价于 |
|---|---|---|---|
= |
赋值 | x = 5 |
- |
+= |
加后赋值 | x += 3 |
x = x + 3 |
-= |
减后赋值 | x -= 3 |
x = x - 3 |
*= |
乘后赋值 | x *= 3 |
x = x * 3 |
/= |
除后赋值 | x /= 3 |
x = x / 3 |
%= |
取余后赋值 | x %= 3 |
x = x % 3 |
public class AssignmentDemo {
public static void main(String[] args) {
int x = 10;
x += 5; // x = 15
System.out.println("x += 5: " + x);
x -= 3; // x = 12
System.out.println("x -= 3: " + x);
x *= 2; // x = 24
System.out.println("x *= 2: " + x);
x /= 4; // x = 6
System.out.println("x /= 4: " + x);
x %= 4; // x = 2
System.out.println("x %= 4: " + x);
}
}
4.3 比较运算符
用于比较两个值,返回布尔值:
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 5 > 3 |
true |
< |
小于 | 5 < 3 |
false |
>= |
大于等于 | 5 >= 5 |
true |
<= |
小于等于 | 5 <= 3 |
false |
public class ComparisonDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); // false
System.out.println("a < b: " + (a < b)); // true
System.out.println("a >= 10: " + (a >= 10)); // true
System.out.println("a <= 5: " + (a <= 5)); // false
// 字符串比较使用equals()
String s1 = "hello";
String s2 = "hello";
System.out.println("s1 == s2: " + (s1 == s2)); // 引用比较
System.out.println("s1.equals(s2): " + s1.equals(s2)); // 值比较
}
}
重要: 比较字符串时,使用 equals() 方法而非 ==。
4.4 逻辑运算符
用于组合布尔表达式:
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
&& |
逻辑与(短路) | true && false |
false |
| ` | ` | 逻辑或(短路) | |
! |
逻辑非 | !true |
false |
public class LogicalDemo {
public static void main(String[] args) {
int age = 25;
boolean hasID = true;
// 逻辑与:两个条件都为真才为真
boolean canEnter = age >= 18 && hasID;
System.out.println("可以进入:" + canEnter); // true
// 逻辑或:至少一个条件为真就为真
boolean isWeekend = false;
boolean isHoliday = true;
boolean canRest = isWeekend || isHoliday;
System.out.println("可以休息:" + canRest); // true
// 逻辑非:取反
boolean isRaining = false;
boolean isSunny = !isRaining;
System.out.println("晴天:" + isSunny); // true
// 短路运算演示
int x = 0;
boolean result = (x != 0) && (10 / x > 1);
System.out.println("短路结果:" + result); // false,不会除零错误
}
}
4.5 三元运算符
简化if-else语句的写法:
public class TernaryDemo {
public static void main(String[] args) {
int age = 20;
// 三元运算符:条件 ? 真值 : 假值
String status = (age >= 18) ? "成年人" : "未成年人";
System.out.println("状态:" + status);
// 求最大值
int a = 10, b = 20;
int max = (a > b) ? a : b;
System.out.println("最大值:" + max);
}
}
5. 字符串操作
字符串(String)是Java中最常用的数据类型之一:
public class StringDemo {
public static void main(String[] args) {
// 创建字符串
String name = "张三";
String greeting = "你好";
// 字符串连接
String message = greeting + "," + name + "!";
System.out.println(message); // 你好,张三!
// 字符串长度
System.out.println("长度:" + name.length()); // 2
// 字符串比较
String s1 = "Hello";
String s2 = "hello";
System.out.println("equals: " + s1.equals(s2)); // false
System.out.println("equalsIgnoreCase: " + s1.equalsIgnoreCase(s2)); // true
// 大小写转换
System.out.println("大写:" + s1.toUpperCase()); // HELLO
System.out.println("小写:" + s1.toLowerCase()); // hello
// 截取子串
String str = "Hello, World!";
System.out.println("子串:" + str.substring(0, 5)); // Hello
// 查找子串
System.out.println("包含World: " + str.contains("World")); // true
System.out.println("World位置:" + str.indexOf("World")); // 7
// 替换
String replaced = str.replace("World", "Java");
System.out.println("替换后:" + replaced); // Hello, Java!
// 格式化
String formatted = String.format("姓名:%s,年龄:%d", "李四", 22);
System.out.println(formatted);
}
}
6. 常量
常量是值一旦设定就不能改变的变量,使用 final 关键字修饰:
public class ConstantDemo {
// 常量命名:全大写,下划线分隔
public static final double PI = 3.141592653589793;
public static final int MAX_SIZE = 100;
public static final String APP_NAME = "JavaApp";
public static void main(String[] args) {
System.out.println("圆周率:" + PI);
System.out.println("最大尺寸:" + MAX_SIZE);
System.out.println("应用名称:" + APP_NAME);
// PI = 3.14; // 编译错误!不能修改常量
final int localVar = 10; // 局部常量
// localVar = 20; // 编译错误!
}
}
7. 用AI工具辅助学习
7.1 让AI解释代码
将不理解的代码粘贴给AI:
请解释这段代码的作用:
int x = 5;
int y = x++;
int z = ++x;
AI会解释:
x++:先使用x的值(5),然后x加1(x变为6)++x:先将x加1(x变为7),然后使用x的值(7)- 所以 y=5, z=7
7.2 让AI生成练习题
提示词:
请给我5道关于Java数据类型和运算符的练习题,包含:
1. 数据类型选择题
2. 类型转换题
3. 算术运算题
4. 逻辑运算题
5. 综合应用题
8. 实践练习
练习1:温度转换
编写程序,将摄氏温度转换为华氏温度:
public class TemperatureConverter {
public static void main(String[] args) {
double celsius = 25.0;
double fahrenheit = celsius * 9 / 5 + 32;
System.out.println("摄氏 " + celsius + "°C = 华氏 " + fahrenheit + "°F");
}
}
练习2:BMI计算器
编写程序,计算身体质量指数(BMI):
public class BMICalculator {
public static void main(String[] args) {
double weight = 70.0; // 体重(kg)
double height = 1.75; // 身高(m)
double bmi = weight / (height * height);
String category;
if (bmi < 18.5) {
category = "偏瘦";
} else if (bmi < 24) {
category = "正常";
} else if (bmi < 28) {
category = "偏胖";
} else {
category = "肥胖";
}
System.out.println("体重:" + weight + "kg");
System.out.println("身高:" + height + "m");
System.out.println("BMI:" + String.format("%.2f", bmi));
System.out.println("体重分类:" + category);
}
}
9. 总结
本篇我们学习了:
✅ 变量:声明、赋值、命名规则、作用域
✅ 数据类型:8种基本类型(整数、浮点、字符、布尔)
✅ 类型转换:自动转换和强制转换
✅ 运算符:算术、赋值、比较、逻辑、三元
✅ 字符串:常用操作方法
✅ 常量:final关键字
核心要点:
- Java是强类型语言,变量必须先声明类型
- 整数除法会截断小数,浮点数有精度问题
- 短路运算可以避免不必要的计算和错误
- 字符串比较使用
equals()而非==
下一篇预告: 《Java从零到熟练(三):流程控制》
- 学习条件判断(if-else、switch)
- 掌握循环结构(for、while、do-while)
- 使用break和continue控制流程
参考资源
下一篇: Java从零到熟练(三):流程控制
更多推荐

所有评论(0)