1. +的优先级大于==

2. float默认值是0.0f

3. java中访问权限问题


4. 数据类型所占字节大小

在 Java 中,各种基本数据类型的大小是固定的,不依赖于具体的操作系统或硬件架构。以下是 Java 中所有基本数据类型的大小和表示范围:
1. 整数类型
| 数据类型 | 大小(字节) | 大小(位) | 范围 |
|---|---|---|---|
byte | 1 | 8 | -128 到 127 |
short | 2 | 16 | -32,768 到 32,767 |
int | 4 | 32 | -2,147,483,648 到 2,147,483,647 |
long | 8 | 64 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
2. 浮点数类型
| 数据类型 | 大小(字节) | 大小(位) | 精度 | 范围 |
|---|---|---|---|---|
float | 4 | 32 | 大约 7 位十进制有效数字 | ±1.4E-45 到 ±3.4028235E38 |
double | 8 | 64 | 大约 15-16 位十进制有效数字 | ±4.9E-324 到 ±1.7976931348623157E308 |
3. 字符类型
| 数据类型 | 大小(字节) | 大小(位) | 范围 |
|---|---|---|---|
char | 2 | 16 | 0 到 65,535 (Unicode) |
说明:Java 的 char 类型使用 Unicode 编码,占用 2 字节,支持所有语言的字符表示。
4. 布尔类型
| 数据类型 | 大小(字节) | 大小(位) | 范围 |
|---|---|---|---|
boolean | 未明确规定 | 未明确规定 | true 或 false |
说明:
- 在 Java 中,
boolean的大小未被明确规定,取决于 JVM 的实现。通常,一个布尔值占用 1 位,但 JVM 为了优化内存布局,可能会按字节或更大的单位存储多个布尔值。 - 只能表示两种值:
true和false。
总结表格
| 数据类型 | 大小(字节) | 大小(位) | 范围 / 精度 |
|---|---|---|---|
byte | 1 | 8 | -128 到 127 |
short | 2 | 16 | -32,768 到 32,767 |
int | 4 | 32 | -2,147,483,648 到 2,147,483,647 |
long | 8 | 64 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
float | 4 | 32 | 精度大约 7 位十进制有效数字 |
double | 8 | 64 | 精度大约 15-16 位十进制有效数字 |
char | 2 | 16 | 0 到 65,535(Unicode) |
boolean | 未明确规定 | 未明确规定 | true 或 false |
扩展:对象引用类型的大小
- 引用类型(如
String或自定义类的实例)的大小依赖于 JVM 和平台。 - 通常,32 位 JVM 中一个对象引用占用 4 字节,而 64 位 JVM 中占用 8 字节(可能启用指针压缩以优化内存)。
5. java中实例变量不需要初始化,局部变量必须初始化

在 Java 中,局部变量必须显式初始化后才能使用,否则编译器会报错。局部变量与类的成员变量(实例变量和静态变量)不同,后者会在声明时被自动初始化为默认值。
详细解释
1. 局部变量
- 局部变量是声明在方法、构造器或代码块中的变量。
- 特点:
- 存储在栈内存中。
- 没有默认值,因此必须显式初始化。
- 在使用之前,Java 编译器会检查是否进行了初始化。
public class Main {public static void main(String[] args) {int x; // 声明局部变量,但未初始化System.out.println(x); // 编译错误:变量 x 可能尚未初始化}
}
正确用法:
public class Main {public static void main(String[] args) {int x = 10; // 显式初始化System.out.println(x); // 正常输出:10}
}
2. 类的成员变量
- 包括实例变量和静态变量。
- 特点:
- 会被自动初始化为默认值。
- 默认值如下:
- 数值类型(如
int,float,double等):0或0.0 - 布尔类型:
false - 引用类型:
null
- 数值类型(如
public class Main {int instanceVar; // 实例变量static int staticVar; // 静态变量public static void main(String[] args) {Main obj = new Main();System.out.println(obj.instanceVar); // 输出默认值:0System.out.println(staticVar); // 输出默认值:0}
}
3. 局部变量为什么不被自动初始化?
- Java 设计局部变量不自动初始化是为了避免程序逻辑中隐藏错误。
- 强制要求显式初始化可以帮助开发者在使用变量之前明确其值,减少潜在的逻辑错误。
4. 特殊情况:局部变量的延迟初始化
- 如果局部变量在后续某个条件中才初始化,只要在使用之前完成初始化即可。
public class Main {public static void main(String[] args) {int x; // 声明局部变量if (Math.random() > 0.5) {x = 10; // 条件初始化} else {x = 20; // 条件初始化}System.out.println(x); // 使用前确保 x 被初始化}
}
5. 局部变量和final关键字
- 如果局部变量被声明为
final,那么它必须在声明时或首次使用前被初始化,而且只能初始化一次。
public class Main {public static void main(String[] args) {final int x;x = 10; // 可以初始化一次System.out.println(x);// x = 20; // 编译错误:final 变量已被初始化}
}
总结
- 局部变量必须显式初始化,未初始化就使用会导致编译错误。
- 类的成员变量(实例变量和静态变量)会被自动初始化为默认值。
- 显式初始化局部变量可以增强代码的可读性和安全性。
5 round四舍五入计算方法:

round 表示”四舍五入”,算法为Math.floor(x+0.5) ,即将原来的数字加上 0.5 后再向下取整,所以 Math.round(11.5) 的结果为 12,Math.round(-11.5) 的结果为 -11。
6. java中所有异常类基类都是Throwable

7 与或非表示

在 Java 中,与、或、非是常见的逻辑运算符,用于进行布尔值的运算。它们分别是:
- 与运算符(AND):
&&(逻辑与)和&(位与) - 或运算符(OR):
||(逻辑或)和|(位或) - 非运算符(NOT):
!(逻辑非)和~(位非)
1. 逻辑与(AND)运算符
&&:逻辑与(短路与)- 当两个条件都为
true时,结果为true;否则为false。 - 具有“短路”特性:如果第一个条件为
false,则不会再评估第二个条件,因为结果已经确定。
- 当两个条件都为
boolean a = true;
boolean b = false;
System.out.println(a && b); // 输出 false
&:位与
- 对于布尔值,和
&&相同,但没有短路效果。它会评估两个条件,即使第一个条件为false。
boolean a = true;
boolean b = false;
System.out.println(a & b); // 输出 false
2. 逻辑或(OR)运算符
||:逻辑或(短路或)- 当任意一个条件为
true时,结果为true;只有当两个条件都为false时,结果才为false。 - 具有“短路”特性:如果第一个条件为
true,则不会再评估第二个条件。
- 当任意一个条件为
boolean a = true;
boolean b = false;
System.out.println(a || b); // 输出 true
|:位或- 对于布尔值,和
||相同,但没有短路效果。它会评估两个条件,即使第一个条件为true。
- 对于布尔值,和
boolean a = true;
boolean b = false;
System.out.println(a | b); // 输出 true
3. 逻辑非(NOT)运算符
!:逻辑非- 取布尔值的反值。
true变false,false变true。
- 取布尔值的反值。
boolean a = true;
System.out.println(!a); // 输出 false
4. 位非(NOT)运算符
~:位非- 对整数进行按位取反,即每一位都进行反转。对于布尔值
true和false,它的用法通常不适用。
- 对整数进行按位取反,即每一位都进行反转。对于布尔值
int a = 5; // 二进制 101
System.out.println(~a); // 输出 -6,按位取反后,得到 11111111111111111111111111111010(二进制补码表示)
总结:
- 逻辑运算符(
&&,||,!)通常用于布尔值的运算。 - 位运算符(
&,|,~)用于按位操作整数,适用于二进制数值。
public class Main {public static void main(String[] args) {boolean a = true;boolean b = false;// 逻辑与System.out.println("a && b: " + (a && b)); // false// 逻辑或System.out.println("a || b: " + (a || b)); // true// 逻辑非System.out.println("!a: " + !a); // false// 位与int x = 5, y = 3; // x = 0101, y = 0011System.out.println("x & y: " + (x & y)); // 1 (0001)// 位或System.out.println("x | y: " + (x | y)); // 7 (0111)// 位非System.out.println("~x: " + (~x)); // -6 (补码反转,11111111111111111111111111111010)}
}
8 堆栈

9 Java 静态函数中不能调用非静态函数的方法;不允许函数参数设置默认值


