数据是程序的血液,变量是存储数据的容器,运算符是处理数据的工具。

目录


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关键字(如 intclasspublic
  • 区分大小写(nameName 是不同变量)

推荐规范:

  • 使用有意义的名称(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 类型只有两个值:truefalse

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关键字

核心要点:

  1. Java是强类型语言,变量必须先声明类型
  2. 整数除法会截断小数,浮点数有精度问题
  3. 短路运算可以避免不必要的计算和错误
  4. 字符串比较使用 equals() 而非 ==

下一篇预告: 《Java从零到熟练(三):流程控制》

  • 学习条件判断(if-else、switch)
  • 掌握循环结构(for、while、do-while)
  • 使用break和continue控制流程

参考资源

  1. Java语言规范 - 基本类型
  2. Java教程 - 变量
  3. 廖雪峰Java教程 - Java基础

下一篇: Java从零到熟练(三):流程控制

更多推荐