java从入门到放弃
2025/6/20大约 4 分钟
变量与数据类型
变量 数据类型
基本数据类型
Java 中,共有 8 种基本数据类型,由 Java 语言预定好的,每个数据类型都属于关键字,而且每种基本变量都有其对应的封装类,这 8 种基本数据类型分别是:
- 整型(4 种)
- 浮点型(2 种)
- 字符型(1 种)
- 布尔型(1 种)
下面的表就是 Java 中 8 大数据类型所占的内存空间,对应封装类,数据表示范围以及默认值的一下相关情况。
| 数据类型 | bit | 字节 | 封装类 | 数据范围 | 默认值 |
|---|---|---|---|---|---|
byte | 8 | 1 | Byte | $-2^7$ ~ $2^7-1$ | 0 |
short | 16 | 2 | Short | $-2^{15}$ ~ $2^{15}-1$ | 0 |
char | 16 | 2 | Character | \u0000 ~ \uffff($0$ ~ $65535$) | u0000 |
int | 32 | 4 | Integer | $-2^{31}$ ~ $2^{31}-1$ | 0 |
long | 64 | 8 | Long | $-2^{63}$ ~ $2^{63}-1$ | 0L |
float | 32 | 4 | Float | $1.4e^{-45}$ ~ $3.4e^{38}$ | 0.0f |
double | 64 | 8 | Double | $4.9e^{-324}$ ~ $1.8e^{308}$ | 0.0D |
boolean | 1 | 不确定 | Boolean | true 或 false | false |
注意:
boolean一般用 1bit来存储,但是具体大小并未规定,JVM 在编译期将boolean类型转换为int,此时 1 代表true,0代表false。此外,JVM 还指出boolean数组,但底层是通过byte数组来实现。- 使用
long类型时,需要在后边加上L/l,否则将其作为整型解析,可能会导致越界。 - 浮点数如果没有明确指定
float还是double,统一按double处理。 char是用 单引号''将内容括起来,只能存放一个字符,相当于一个整型值(ASCII 值),能够参加表达式运算;而String是用 双引号""将内容括起来,代表的是一个地址值。Java在内存中是采用Unicode表示,所以无论是一个中文字符还是英文字符,都能用char来表示。
整型
- ✅ 示例代码:打印所有整数类型的最大值/最小值
public class IntegerRanges {
public static void main(String[] args) {
System.out.println("byte: " + Byte.MIN_VALUE + " to " + Byte.MAX_VALUE);
System.out.println("short: " + Short.MIN_VALUE + " to " + Short.MAX_VALUE);
System.out.println("int: " + Integer.MIN_VALUE + " to " + Integer.MAX_VALUE);
System.out.println("long: " + Long.MIN_VALUE + " to " + Long.MAX_VALUE);
}
}- 💡 计算规则(补充)
所有整数类型都是 有符号的(signed),范围计算方式是:
最小值 = -2^(n-1)
最大值 = 2^(n-1) - 1
其中 n 是位数
(如 byte 是 8 位)。
(如 short 是 16 位)。
(如 int 是 32 位)。
(如 long 是 64 位)。引用数据类型
常见引用数据类型
| 数据类型 | 默认值 |
|---|---|
| 数组 | null |
| 类 | null |
| 接口 | null |
而对于引用数据类型,我们经常是需要 new 关键字来进行赋值,但是引用类型中的 接口是不能被实例化的,我们需要对其进行实现;
// 初始化一个对象
Pet dog = new Pet();
// 初始化一个数组
int[] arr = new int[10];String
对于引用数据类型中的 String,我们需要特别关注。
String 不同于 char,它属于引用类型,而 char 属于基本数据类型。用双引号 "" 括起来表示字符串,一个字符串能够保存 0 个到任意个字符,它一旦创建就不能被改变。
而针对字符串,如果我们要打印一些特殊的字符,比如字符串本来就包含 ",那么这个时候就需要借助于转义字符 \,最常见的转义字符主要有:
| 转义字符 | 含义 |
|---|---|
\" | 字符 " |
\' | 字符 ' |
\\ | 字符 \ |
\n | 换行符 |
\t | 制表符 Tab |
\r | 回车符 |
那多个字符串之间或者字符串和其他类型数据之间,该如何进行连接呢?
Java 编译器中,对于字符串和其他数据类型之间,可以使用 + 进行连接,编译器会自动将其他数据类型自动转换为字符串,然后再进行连接;
🚫 什么时候不应该使用 String
StringBuffer
StringBuilder
数据类型转换
从小到大自动转,从大到小强制转。
int a = 110;ii
long b = 113;
// 低精度转高精度,由于 long 的范围比 int 大,所以可以自动转
b = a;
// 高精度住低精度,由于 long 的范围比 int 大,所以需要强制转
a = (int)b;
int num = 3;
double ans = 5.0;
// 要将 double 类型的值赋值给 int,则需要强制转换
num = (int)ans;- 字符串与其他类型之间的转换
其他类型 -> 字符串
// 方法 1
String str1 = Integer.toString(int num);
String str2 = Long.toString(long num);
String str3 = Float.toString(flaot num);
String str4 = Double.toString(double num);
// 方法 2
String str = "" + num ; // num 是 int、long、float、double 类型
// 方法 3
String str1 = String.valueOf(int num);
String str2 = String.valueOf(long num);
String str3 = String.valueOf(float num);
String str4 = String.valueOf(double num);字符串 - > 其他类型
// 方法 1
int num1 = Integer.parseInt(String str);
Long num2 = Long.parseLong(String str);
Float num3 = Float.parseFloat(String str);
Double num4 = Double.parseDouble(String str);
// 方法 2
int num1 = Integer.valueOf(String str).intValue();
Long num2 = Long.valueOf(String str).longValue();
Float num1 = Float.valueOf(String str).floatValue();
Double num1 = Double.valueOf(String str).doubleValue();常量
final 数据类型 常量名 = 常量初始值;常量可以分为如下 3 种类型:
- 静态常量:final 之前用 public staic 修饰,表示该常量的作用域是全局的,我们不用创建对象就能够访问它。
- 成员常量:类似于成员变量,但是最大的不同在于它不能被修改。
- 局部常量:作用类似于局部变量,不同之处也在于不能修改。