Skip to content

Java变量、数据类型转换与运算符完全指南

目录


一、核心知识点

1. 常量

1.1 概述

在代码运行过程中,值不会发生改变的数据,也叫"字面值"。

1.2 分类

常量类型表示方式示例说明
整数常量直接写数字10, -100, 0所有整数
小数常量带小数点2.5, 3.14, 0.0所有小数
字符常量单引号'''a', '中', ' '单引号中必须有且只能有一个内容
字符串常量双引号"""hello", "Java", ""双引号中可以写任意内容
布尔常量直接写true, false用于判断
空常量nullnull代表数据不存在,不能直接使用

1.3 重要注意事项

除法运算规则:

  • 除号前后都是整数:结果只取整数部分,小数点直接舍去
  • 除号前后有一个是小数:结果是正常小数
java
System.out.println(10/3);      // 输出: 3
System.out.println(10.0/3);    // 输出: 3.3333333333333335

1.4 转义字符

转义字符说明
\n换行
\t制表符(Tab)
\\表示一个反斜杠
\"表示一个双引号
\'表示一个单引号
java
System.out.println("hello\nworld");     // 换行输出
System.out.println("hello\tworld");     // 带Tab输出
String path = "F:\\jdk\\bin";           // 表示路径

2. 变量

2.1 概述

在代码运行过程中,值会随着不同情况随时发生改变的数据。

2.2 定义格式

java
// 格式1:定义单个变量
数据类型 变量名 = 值;

// 格式2:定义多个相同类型的变量
数据类型 变量名1 = 值1, 变量名2 = 值2;

2.3 Java数据类型

基本数据类型(4类8种):

类型关键字内存占用取值范围默认值
字节型byte1字节-128 至 1270
短整型short2字节-32768 至 327670
整型int4字节-2³¹ 至 2³¹-1(约±21亿)0
长整型long8字节-2⁶³ 至 2⁶³-1(19位数字)0L
单精度浮点数float4字节1.4013E-45 至 3.4028E+380.0F
双精度浮点数double8字节4.9E-324 至 1.7977E+3080.0
字符型char2字节0 至 2¹⁶-1'\u0000'
布尔型boolean1字节true, falsefalse

引用数据类型:

  • 类(class)
  • 数组(array)
  • 接口(interface)
  • 枚举(enum)
  • 注解(@interface)
  • Record类

重要说明:

  • String属于类,是引用类型
  • 整数默认类型:int
  • 小数默认类型:double
  • long赋值建议加Llong num = 100L;
  • float赋值必须加Ffloat num = 10.5F;

2.4 取值范围排序(从小到大)

byte, short, char → int → long → float → double

2.5 变量使用注意事项

  1. 同一作用域内不能定义重名变量
java
int i = 10;
// int i = 20;  // 错误:重复定义
i = 20;         // 正确:重新赋值
  1. 不同作用域的访问规则
  • 小作用域可以访问大作用域的变量
  • 大作用域不能直接访问小作用域的变量
java
int i = 10;
{
    int j = 100;
    System.out.println(i);  // 正确:可以访问外层变量
}
// System.out.println(j);  // 错误:无法访问内层变量
  1. 变量必须初始化才能使用
java
int x;
// System.out.println(x);  // 错误:未初始化

3. 标识符

3.1 概述

给类、变量、方法取的名字。

3.2 命名规则

硬性规定:

  • 标识符不能是关键字
  • 可以包含字母、数字、_$
  • 不能以数字开头
  • 区分大小写

软性建议:

  • 类名:大驼峰式(每个单词首字母大写)
    • 示例:HelloWorld, StudentManager
  • 方法名、变量名:小驼峰式(从第二个单词开始首字母大写)
    • 示例:maxAge, getStudentName

4. 数据类型转换

4.1 自动类型转换(小转大)

发生时机:

  1. 取值范围大的类型 变量名 = 取值范围小的类型
  2. 取值范围大的类型和取值范围小的类型做运算
java
// 示例1:小转大
long num1 = 100;  // int → long

// 示例2:运算时自动转换
int a = 10;
double b = 2.5;
double sum = a + b;  // int + double → double

4.2 强制类型转换(大转小)

格式:

java
取值范围小的类型 变量名 = (取值范围小的类型)取值范围大的类型;

示例:

java
int a = (int)2.5;  // double → int,结果为2

4.3 强转注意事项

  1. 精度损失和数据溢出
java
int num = (int)10000000000L;  // 溢出,结果:1410065408
int a = (int)2.9;              // 精度损失,结果:2
  1. byte和short的特殊情况
java
// 字面值不超范围,JVM自动强转
byte b1 = 10;  // 正确

// 变量参与运算,需要手动强转
byte b2 = 10;
byte result = (byte)(b2 + 1);  // 必须强转
  1. char类型运算
java
char c = 'a';
System.out.println(c + 0);     // 输出:97(ASCII码)
System.out.println('中' + 0);  // 输出:20013(Unicode码)
  1. 浮点数精度问题
java
// float和double不要直接做运算,会出现精度损失
float f = 0.1F;
double d = 0.1;
System.out.println(f == d);  // false,精度不同

5. 运算符

5.1 算术运算符

符号说明示例
+加法10 + 3 = 13
-减法10 - 3 = 7
*乘法10 * 3 = 30
/除法10 / 3 = 3
%取余10 % 3 = 1

+的特殊用法:字符串拼接

java
int a = 10, b = 3;
System.out.println(a + b + "");     // "13"
System.out.println("" + a + b);     // "103"
System.out.println("" + (a + b));   // "13"
System.out.println("结果:" + a);    // "结果:10"

5.2 自增自减运算符

格式说明
变量++先使用原值,再+1
++变量先+1,再使用新值
变量--先使用原值,再-1
--变量先-1,再使用新值

使用规则:

  • 单独使用:符号在前在后都一样,都是先运算
  • 混合使用
    • 符号在前:先运算,再使用运算后的值
    • 符号在后:先使用原值,再运算
java
int i = 10;
i++;  // 单独使用,i变为11

int j = 10;
int result = ++j;  // 混合使用,先+1再赋值,result=11, j=11

int k = 10;
int res = k++;  // 混合使用,先赋值再+1,res=10, k=11

开发建议:只使用单独使用的方式,避免混淆

5.3 赋值运算符

符号说明示例
=基本赋值int a = 10;
+=加后赋值a += 3; 等价于 a = a + 3;
-=减后赋值a -= 3; 等价于 a = a - 3;
*=乘后赋值a *= 3; 等价于 a = a * 3;
/=除后赋值a /= 3; 等价于 a = a / 3;
%=取余后赋值a %= 3; 等价于 a = a % 3;

重要特性:复合赋值运算符会自动强转

java
byte b = 10;
b += 1;  // 等价于 b = (byte)(b + 1); 自动强转
System.out.println(b);  // 输出:11

5.4 关系运算符(比较运算符)

符号说明示例
==判断是否相等10 == 10true
>判断是否大于10 > 5true
<判断是否小于10 < 5false
>=判断是否大于等于10 >= 10true
<=判断是否小于等于10 <= 5false
!=判断是否不相等10 != 5true

结果:都是boolean类型(true或false)

5.5 逻辑运算符

符号说明示例
&&与(并且)有假则假,全真才真
||或(或者)有真则真,全假才假
!非(取反)!truefalse
^异或相同为false,不同为true

短路效果:

  • &&:如果前面为false,后面不判断
  • ||:如果前面为true,后面不判断
java
int a = 10, b = 20;
boolean result = ++a > 100 && ++b > 100;
// a=11, b=20(短路,b没有自增)

实际应用:

java
int score = 60;
boolean valid = score >= 0 && score <= 100;  // 判断分数是否在0-100之间

5.6 三元运算符

格式:

java
boolean表达式 ? 表达式1 : 表达式2

执行流程:

  1. 先判断boolean表达式
  2. 如果为true,执行表达式1
  3. 如果为false,执行表达式2

示例:

java
int a = 10, b = 20;
int max = a > b ? a : b;  // 取最大值,结果:20

int score = 75;
String result = score >= 60 ? "及格" : "不及格";  // 结果:"及格"

int week = 0;
System.out.println("周" + (week == 0 ? "日" : week));  // 处理周日特殊情况

二、重点难点

1. 数据类型选择原则

场景推荐类型原因
整数int默认类型,范围够用
大整数long超过int范围时使用
小数double默认类型,精度更高
单字符char专门存储单个字符
判断boolean逻辑判断
字符串String多个字符

2. 类型转换核心规则

自动转换(隐式):

byte, short, char → int → long → float → double

强制转换(显式):

  • 可能损失精度
  • 可能数据溢出
  • 语法:(目标类型)值

3. 运算符优先级(从高到低)

  1. () 小括号
  2. ++ -- 自增自减
  3. * / % 乘除取余
  4. + - 加减
  5. << >> >>> 位移
  6. < > <= >= 比较
  7. == != 相等判断
  8. & 按位与
  9. ^ 按位异或
  10. | 按位或
  11. && 逻辑与
  12. || 逻辑或
  13. ?: 三元运算符
  14. = += -= 赋值

建议:使用小括号明确优先级,避免混淆

4. 常见陷阱

陷阱1:整数除法

java
int a = 10, b = 3;
double result = a / b;  // 结果:3.0,不是3.333...
// 正确写法:
double result = a * 1.0 / b;  // 结果:3.333...

陷阱2:自增自减混合使用

java
int i = 10;
i = i++;  // 结果:10(先赋值再自增,自增后的值丢失)

陷阱3:浮点数精度

java
double d1 = 0.1;
double d2 = 0.2;
System.out.println(d1 + d2);  // 输出:0.30000000000000004

陷阱4:byte/short运算

java
byte b1 = 10, b2 = 20;
byte b3 = b1 + b2;  // 错误:需要强转
byte b3 = (byte)(b1 + b2);  // 正确

三、常见面试题

基础题 ⭐

1. Java的基本数据类型有哪些?String是基本数据类型吗?

答案: Java的基本数据类型有8种:

  • 整型:byte, short, int, long
  • 浮点型:float, double
  • 字符型:char
  • 布尔型:boolean

String不是基本数据类型,它是引用类型,属于类。


2. float f = 3.4; 是否正确?

答案: 不正确。3.4默认是double类型,不能直接赋值给float变量。

正确写法:

java
float f = 3.4F;  // 或
float f = 3.4f;

3. char型变量中是否可以存储一个汉字?

答案: 可以。char类型占2个字节,采用Unicode编码,可以存储一个汉字。

java
char c = '中';
System.out.println(c);  // 输出:中

4. 表达式 15/2*2 的值是多少?

答案: 结果是14。

解析:

java
15 / 2 = 7  // 整数除法,结果为7
7 * 2 = 14  // 最终结果

进阶题 ⭐⭐

5. 下面代码的输出结果是什么?

java
int i = 1;
i *= 0.2;
System.out.println("i=" + i);

答案: 输出:i=0

解析:

  1. i *= 0.2 等价于 i = (int)(i * 0.2)
  2. 1 * 0.2 = 0.2
  3. 强制转换为int:(int)0.2 = 0
  4. 复合赋值运算符会自动强转

6. 下面代码的输出结果是什么?

java
int a = 8, b = 3;
System.out.println(a >>> b);
System.out.println(a >>> b | 2);

答案:

1
3

解析:

  1. a >>> b:8右移3位(无符号右移)
    • 8的二进制:0000 1000
    • 右移3位:0000 0001 → 1
  2. a >>> b | 2:1或2
    • 1的二进制:0001
    • 2的二进制:0010
    • 按位或:0011 → 3

7. 如何判断一个年份是否是闰年?

答案:

java
int year = 2024;
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
System.out.println(year + (isLeapYear ? "是闰年" : "不是闰年"));

闰年判断标准:

  1. 能被4整除,但不能被100整除
  2. 或者能被400整除

8. 下面代码的输出结果是什么?

java
int i = 1;
int j = 5;
j *= i++ + j++;
System.out.println("i=" + i);
System.out.println("j=" + j);

答案:

i=2
j=30

解析:

  1. i++:先使用i的值1,然后i变为2
  2. j++:先使用j的值5,然后j变为6
  3. i++ + j++ = 1 + 5 = 6
  4. j *= 6j = 6 * 6 = 30(注意此时j已经是6了)

高级题 ⭐⭐⭐

9. 为什么浮点数运算会有精度问题?如何解决?

答案:

原因: float和double采用IEEE 754标准,使用二进制浮点数表示,无法精确表示某些十进制小数。

示例:

java
System.out.println(0.1 + 0.2);  // 0.30000000000000004
System.out.println(1.0 - 0.9);  // 0.09999999999999998

解决方案:

  1. 使用BigDecimal类
java
import java.math.BigDecimal;

BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.2");
BigDecimal result = bd1.add(bd2);
System.out.println(result);  // 0.3
  1. 使用整数运算(先乘后除)
java
int a = 10;  // 代表0.10元
int b = 20;  // 代表0.20元
int sum = a + b;  // 30,代表0.30元

10. byte b = 10; b = b + 1; 和 b += 1; 有什么区别?

答案:

区别:

java
byte b = 10;
b = b + 1;   // 编译错误:需要强转
b += 1;      // 正确:自动强转

原因:

  • b + 1:byte会自动提升为int,结果是int类型,不能直接赋值给byte
  • b += 1:复合赋值运算符会自动进行强制类型转换,等价于 b = (byte)(b + 1)

正确写法:

java
byte b = 10;
b = (byte)(b + 1);  // 手动强转
b += 1;             // 自动强转

11. 如何交换两个变量的值?有哪些方法?

答案:

方法1:使用第三方变量(推荐)

java
int a = 10, b = 20;
int temp = a;
a = b;
b = temp;

方法2:使用加减法(可能溢出)

java
int a = 10, b = 20;
a = a + b;  // a = 30
b = a - b;  // b = 10
a = a - b;  // a = 20

方法3:使用异或运算(面试常考)

java
int a = 10, b = 20;
a = a ^ b;  // a = 30
b = a ^ b;  // b = 10
a = a ^ b;  // a = 20

方法4:使用三元运算符(不推荐,可读性差)

java
int a = 10, b = 20;
a = a + b - (b = a);

12. & 和 && 有什么区别?

答案:

对比项&&&
名称逻辑与/按位与短路与
短路效果
执行方式两边都会判断前面为false,后面不判断
使用场景位运算逻辑判断(推荐)

示例:

java
int a = 10, b = 20;
// 使用 &
boolean r1 = (a > 100) & (b++ > 10);
System.out.println(b);  // 21,b自增了

// 使用 &&
int c = 10, d = 20;
boolean r2 = (c > 100) && (d++ > 10);
System.out.println(d);  // 20,短路,d没有自增

开发建议:逻辑判断时使用 && 和 ||


四、实用代码片段

1. 变量定义与输出

java
public class PersonInfo {
    public static void main(String[] args) {
        String name = "张三";
        char gender = '男';
        int age = 25;
        double height = 1.75;
        double weight = 70.5;
        
        System.out.println("姓名:" + name);
        System.out.println("性别:" + gender);
        System.out.println("年龄:" + age);
        System.out.println("身高:" + height + "米");
        System.out.println("体重:" + weight + "公斤");
    }
}

2. 数据类型转换示例

java
public class TypeConversion {
    public static void main(String[] args) {
        // 自动类型转换
        int intValue = 100;
        long longValue = intValue;  // int → long
        double doubleValue = longValue;  // long → double
        
        // 强制类型转换
        double d = 3.9;
        int i = (int)d;  // 结果:3,精度损失
        
        // byte和short的特殊情况
        byte b1 = 10;  // 字面值,自动强转
        byte b2 = 20;
        byte b3 = (byte)(b1 + b2);  // 变量运算,手动强转
        
        // char运算
        char c = 'A';
        System.out.println(c + 0);  // 输出:65
        System.out.println((char)(c + 32));  // 输出:a
    }
}

3. 运算符综合应用

java
public class OperatorDemo {
    public static void main(String[] args) {
        int a = 10, b = 3;
        
        // 算术运算
        System.out.println("加法:" + (a + b));
        System.out.println("减法:" + (a - b));
        System.out.println("乘法:" + (a * b));
        System.out.println("除法:" + (a / b));
        System.out.println("取余:" + (a % b));
        
        // 自增自减
        int i = 10;
        i++;
        System.out.println("i++后:" + i);  // 11
        
        // 三元运算符:求最大值
        int max = a > b ? a : b;
        System.out.println("最大值:" + max);
        
        // 逻辑运算:判断分数是否有效
        int score = 85;
        boolean isValid = score >= 0 && score <= 100;
        System.out.println("分数有效:" + isValid);
    }
}

4. 实际应用案例

案例1:计算天数和小时数

java
public class DayHourCalculator {
    public static void main(String[] args) {
        int totalHours = 89;
        int days = totalHours / 24;
        int hours = totalHours % 24;
        
        System.out.println(totalHours + "小时 = " + days + "天" + hours + "小时");
        // 输出:89小时 = 3天17小时
    }
}

案例2:计算100天后是周几

java
public class WeekCalculator {
    public static void main(String[] args) {
        int today = 2;  // 今天是周二
        int futureDays = 100;
        
        int futureWeek = (today + futureDays) % 7;
        String weekDay = futureWeek == 0 ? "日" : String.valueOf(futureWeek);
        
        System.out.println("今天是周" + today + "," + futureDays + "天后是周" + weekDay);
        // 输出:今天是周2,100天后是周4
    }
}

案例3:求三个数的最大值

java
public class MaxOfThree {
    public static void main(String[] args) {
        int x = 3, y = 4, z = 1;
        
        // 方法1:嵌套三元运算符
        int max = (x > y ? x : y) > z ? (x > y ? x : y) : z;
        System.out.println("最大值:" + max);
        
        // 方法2:分步比较(推荐)
        int max2 = x > y ? x : y;
        max2 = max2 > z ? max2 : z;
        System.out.println("最大值:" + max2);
    }
}

案例4:判断闰年

java
public class LeapYear {
    public static void main(String[] args) {
        int year = 2024;
        boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
        
        System.out.println(year + (isLeap ? "是闰年" : "不是闰年"));
        // 输出:2024是闰年
    }
}

案例5:华氏温度转摄氏温度

java
public class TemperatureConverter {
    public static void main(String[] args) {
        double fahrenheit = 80.0;
        double celsius = (fahrenheit - 32) / 1.8;
        
        System.out.println("华氏温度:" + fahrenheit + "°F");
        System.out.println("摄氏温度:" + celsius + "°C");
        // 输出:摄氏温度:26.666666666666668°C
    }
}

五、经典练习题

基础题

练习1:输出各种常量

要求: 输出字符串、字符、整数、小数、布尔类型常量

java
public class Test1 {
    public static void main(String[] args) {
        // 字符串常量
        System.out.println("善学如春起之苗");
        System.out.println("不见其增,日有所长");
        
        // 字符常量
        System.out.println('J');
        System.out.println('A');
        System.out.println('V');
        System.out.println('A');
        
        // 整数常量
        System.out.println(100);
        System.out.println(-200);
        
        // 小数常量
        System.out.println(3.14);
        System.out.println(-9.8);
        
        // 布尔常量
        System.out.println(true);
        System.out.println(false);
    }
}

练习2:定义各种类型的变量

要求: 定义byte、short、int、long、float、double、char、boolean类型变量并输出

java
public class Test2 {
    public static void main(String[] args) {
        byte byteVar = 127;
        short shortVar = 30000;
        int intVar = 100000;
        long longVar = 10000000000L;
        float floatVar = 3.14F;
        double doubleVar = 3.141592653;
        char charVar = 'A';
        boolean booleanVar = true;
        
        System.out.println("byte: " + byteVar);
        System.out.println("short: " + shortVar);
        System.out.println("int: " + intVar);
        System.out.println("long: " + longVar);
        System.out.println("float: " + floatVar);
        System.out.println("double: " + doubleVar);
        System.out.println("char: " + charVar);
        System.out.println("boolean: " + booleanVar);
    }
}

练习3:交换两个变量的值

要求: 使用第三方变量交换两个整数变量的值

java
public class Test3 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        
        System.out.println("交换前:a=" + a + ", b=" + b);
        
        int temp = a;
        a = b;
        b = temp;
        
        System.out.println("交换后:a=" + a + ", b=" + b);
    }
}

练习4:四则运算

要求: 计算两个整数的和、差、积、商

java
public class Test4 {
    public static void main(String[] args) {
        int x = 100;
        int y = 200;
        
        System.out.println("x + y = " + (x + y));
        System.out.println("x - y = " + (x - y));
        System.out.println("x * y = " + (x * y));
        System.out.println("x / y = " + (x / y));
    }
}

进阶题

练习5:类型转换练习

要求: 理解byte、short、char类型运算时的类型转换

java
public class Test5 {
    public static void main(String[] args) {
        // byte运算
        byte b1 = 10, b2 = 20;
        byte b3 = (byte)(b1 + b2);  // 需要强转
        System.out.println("byte相加:" + b3);
        
        // short运算
        short s1 = 1000, s2 = 2000;
        short s3 = (short)(s1 + s2);  // 需要强转
        System.out.println("short相加:" + s3);
        
        // char运算
        char c = 'a';
        int i = 30;
        int result = c - i;  // char自动提升为int
        System.out.println("char减int:" + result);  // 97 - 30 = 67
    }
}

练习6:判断奇偶数

要求: 使用三元运算符判断一个数是奇数还是偶数

java
public class Test6 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 11;
        
        System.out.println(num1 + "是偶数?" + (num1 % 2 == 0));
        System.out.println(num2 + "是奇数?" + (num2 % 2 != 0));
        
        // 使用三元运算符
        String result1 = num1 % 2 == 0 ? "偶数" : "奇数";
        String result2 = num2 % 2 == 0 ? "偶数" : "奇数";
        
        System.out.println(num1 + "是" + result1);
        System.out.println(num2 + "是" + result2);
    }
}

练习7:计算天数和剩余小时

要求: 输入总小时数,计算是多少天零多少小时

java
public class Test7 {
    public static void main(String[] args) {
        int hours = 89;
        int days = hours / 24;
        int remainingHours = hours % 24;
        
        System.out.println(hours + "小时 = " + days + "天" + remainingHours + "小时");
    }
}

练习8:计算未来周几

要求: 今天是周2,计算100天后是周几

java
public class Test8 {
    public static void main(String[] args) {
        int today = 2;
        int futureDays = 100;
        
        int futureWeek = (today + futureDays) % 7;
        
        // 处理周日的特殊情况
        String weekDay = futureWeek == 0 ? "日" : String.valueOf(futureWeek);
        
        System.out.println("今天是周" + today + "," + futureDays + "天后是周" + weekDay);
    }
}

练习9:求三个数的最大值

要求: 使用三元运算符求三个整数中的最大值

java
public class Test9 {
    public static void main(String[] args) {
        int x = 3, y = 4, z = 1;
        
        // 先比较x和y,得到较大值
        int max = x > y ? x : y;
        // 再与z比较
        max = max > z ? max : z;
        
        System.out.println(x + ", " + y + ", " + z + "中的最大值是:" + max);
    }
}

练习10:判断闰年

要求: 判断给定年份是否是闰年

java
public class Test10 {
    public static void main(String[] args) {
        int year = 2024;
        
        boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
        
        System.out.println(year + (isLeapYear ? "是闰年" : "不是闰年"));
    }
}

挑战题

练习11:温度转换

要求: 将华氏温度转换为摄氏温度 公式:C = (F - 32) / 1.8

java
public class Test11 {
    public static void main(String[] args) {
        double fahrenheit = 80.0;
        double celsius = (fahrenheit - 32) / 1.8;
        
        System.out.println("华氏温度:" + fahrenheit + "°F");
        System.out.println("摄氏温度:" + String.format("%.2f", celsius) + "°C");
    }
}

练习12:复杂运算

要求: 分析下面代码的输出结果

java
public class Test12 {
    public static void main(String[] args) {
        int i = 1;
        int j = 5;
        j *= i++ + j++;
        
        System.out.println("i = " + i);  // i = 2
        System.out.println("j = " + j);  // j = 30
    }
}

解析:

  1. i++:先使用i的值1,然后i变为2
  2. j++:先使用j的值5,然后j变为6
  3. i++ + j++ = 1 + 5 = 6
  4. j *= 6j = 6 * 6 = 30(注意此时j已经是6了)

六、学习建议

1. 学习路径

Day 1-2: 基础语法
├── 常量与变量
├── 数据类型
├── 标识符命名
├── 类型转换
└── 运算符

Day 3-4: 流程控制 [下一章预告]
├── if-else语句
├── switch语句
├── for循环
├── while循环
└── do-while循环

2. 重点记忆内容

必须背诵:

  1. 8种基本数据类型及其取值范围
  2. 数据类型转换规则(小→大自动,大→小强转)
  3. 运算符优先级
  4. 标识符命名规则

必须理解:

  1. 变量的作用域
  2. 自增自减的使用
  3. 短路逻辑运算符
  4. 三元运算符的执行流程

3. 常见错误避免

错误类型错误示例正确写法
float未加Ffloat f = 3.4;float f = 3.4F;
long未加Llong l = 10000000000;long l = 10000000000L;
byte运算未强转byte b = b1 + b2;byte b = (byte)(b1 + b2);
变量未初始化int x; System.out.println(x);int x = 0; System.out.println(x);
整数除法错误double d = 10 / 3;double d = 10.0 / 3;

4. 练习建议

基础练习(必须完成):

  • 定义各种类型的变量
  • 进行类型转换操作
  • 使用各种运算符
  • 完成day01和day02的所有基础题目

进阶练习(推荐完成):

  • 分析复杂表达式的执行过程
  • 编写实际应用案例
  • 尝试优化代码

面试准备:

  • 理解每个知识点的原理
  • 能够清晰解释常见面试题
  • 能够举一反三

5. 调试技巧

使用输出语句调试:

java
int a = 10, b = 20;
System.out.println("a = " + a + ", b = " + b);
System.out.println("a + b = " + (a + b));

分步验证:

java
// 复杂表达式分步计算
int result = a + b * c - d / e;
// 拆分为:
int temp1 = b * c;
int temp2 = d / e;
int result = a + temp1 - temp2;
System.out.println("temp1=" + temp1 + ", temp2=" + temp2 + ", result=" + result);

6. 编码规范

命名规范:

  • 类名:大驼峰 StudentManager
  • 变量名:小驼峰 maxAge
  • 常量名:全大写+下划线 MAX_VALUE

代码规范:

  • 一行只写一条语句
  • 使用缩进保持代码层次清晰
  • 适当添加注释
  • 运算符两侧加空格

示例:

java
public class GoodExample {
    public static void main(String[] args) {
        // 定义变量
        int maxAge = 100;
        double avgScore = 85.5;
        
        // 计算结果
        int result = maxAge + 10;
        
        // 输出结果
        System.out.println("结果:" + result);
    }
}

7. 扩展学习方向

基于当前进度,下一阶段学习:

  • 流程控制语句(if-else, switch, 循环)
  • 数组的使用
  • 方法的定义和调用

深入学习建议:

  • 理解Java内存模型(栈、堆)
  • 学习包装类(Integer, Double等)
  • 了解自动装箱和拆箱

附录:快速参考表

数据类型速查表

类型字节位数取值范围默认值
byte18-128 ~ 1270
short216-32768 ~ 327670
int432-2³¹ ~ 2³¹-10
long864-2⁶³ ~ 2⁶³-10L
float432±3.4E380.0F
double864±1.7E3080.0
char2160 ~ 65535'\u0000'
boolean18true/falsefalse

运算符速查表

类型运算符说明
算术+ - * / %加减乘除取余
自增自减++ --自增自减
赋值= += -= *= /= %=赋值运算
关系== != > < >= <=比较运算
逻辑&& || ! ^逻辑运算
三元? :条件运算

ASCII码表(常用)

字符ASCII值
'0' - '9'48 - 57
'A' - 'Z'65 - 90
'a' - 'z'97 - 122
'\n'10
'\t'9
' '32