Java基础——变量与基本数据类型

7 阅读2分钟

一、Java变量类型及底层原理

1.1 变量在内存中的存吃

1.1.1 栈内存

方法内部声明的变量存储在栈内存中(包括方法参数)

特征

  • 线程私有,生命周期与方法调用相同
  • 存储基本数据类型和对象引用(不是对象本身)
  • 后进先出,分配和释放速度快

1.1.2 堆内存

new创建的对象实例存储在堆内存中

特征

  • 线程共享,生命周期由垃圾回收器管理
  • 存储对象实际数据和数组
  • 分配和释放速度较慢

1.2 方法区

静态变量:static修饰的变量存储在方法区(Java 8后称为元空间)

特点:

  • 线程共享
  • 存储类级别的信息,包括静态变量、常量池等

二、基本数据类型

数据类型大小(位)默认值底层表示
byte80有符号整数
short160有符号整数
int320有符号整数
long640L有符号整数
float320.0fIEEE 754浮点数
double640.0dIEEE 754浮点数
char16'\u0000'Unicode字符
booleanJVM实现相关false通常用1位或1字节表示

三、基本数据类型的转换

3.1 自动转换(隐式转换)

小类型->大类型,编译器会自动转换,无需手动操作

byteshortintlongfloatdouble
charint

注意: 之所以chat能向int类型转换,是因为将char类型数据转化对应的ASCII码值

3.2强制转化(显示转换)

大类型->小类型,必须强转,否则会编译错误

目标类型 变量名 = (目标类型) 源变量;
// 示例
long b = 1;
int a = (int) b;

注意事项

  • 强制转换可能导致数据精度丢失或溢出
  • 转换前应确保数据在目标类型的范围内

3.3基本数据类型与包装类之间的转换

Java 5引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)机制,简化了基本类型与包装类之间的转换。

1. 自动装箱(基本类型 → 包装类)

java
Integer num = 10; // 自动装箱,相当于Integer num = Integer.valueOf(10);
Double d = 3.14;  // 自动装箱

2. 自动拆箱(包装类 → 基本类型)

java
Integer num = 10;
int i = num; // 自动拆箱,相当于int i = num.intValue();

Double d = 3.14;
double value = d; // 自动拆箱

3. 底层原理

java
// 基本类型 → 包装类
int primitiveInt = 20;
Integer wrappedInt = Integer.valueOf(primitiveInt); // 或 new Integer(primitiveInt)

// 包装类 → 基本类型
Integer wrappedInt = 30;
int primitiveInt = wrappedInt.intValue();

3.1字符串与其他类型的转换

1. 基本类型 -> 字符串

方法1:基本数据类型:使用String.valueOf()

java
int i = 10;
String str = String.valueOf(i); 

方法2:包装类:使用包装类的toString()

java
Integer num = 20;
String str = num.toString();

2.字符串 -> 基本类型

使用包装类的parseXxx()方法:

java
String str = "123";
int i = Integer.parseInt(str);
double d = Double.parseDouble("3.14");
boolean b = Boolean.parseBoolean("true");
long l = Long.parseLong("1000L");

若类型转换错误,会抛出NumberFormatException异常,要注意捕获异常,进行处理