网站首页 > 基础教程 正文
Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型: 4 种整数型:byte、short、int、long 2 种浮点型:float、double
- 1 种字符类型:char
- 1 种布尔型:boolean。
这 8 种基本数据类型的默认值以及所占空间的大小如下:
基本类型 | 位数 | 字节 | 默认值 | 取值范围 |
byte | 8 | 1 | 0 | -128 ~ 127 |
short | 16 | 2 | 0 | -32768(-2^15) ~ 32767(2^15 - 1) |
int | 32 | 4 | 0 | -2147483648 ~ 2147483647 |
long | 64 | 8 | 0L | -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) |
char | 16 | 2 | 'u0000' | 0 ~ 65535(2^16 - 1) |
float | 32 | 4 | 0f | 1.4E-45 ~ 3.4028235E38 |
double | 64 | 8 | 0d | 4.9E-324 ~ 1.7976931348623157E308 |
boolean | 1 | false | true、false |
可以看到,像 byte、short、int、long能表示的最大正数都减 1 了。这是为什么呢?这是因为在二进制补码表示法中,最高位是用来表示符号的(0 表示正数,1 表示负数),其余位表示数值部分。所以,如果我们要表示最大的正数,我们需要把除了最高位之外的所有位都设为 1。如果我们再加 1,就会导致溢出,变成一个负数。
对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
另外,Java 的每种基本类型所占存储空间的大小不会像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因之一(《Java 编程思想》2.2 节有提到)。
注意:
- Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析。
- char a = 'h'char :单引号,String a = "hello" :双引号。
这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean 。
深入剖析基本类型
整数类型
byte
byte 类型是 8 位有符号整数,表示范围是 -128 到 127。byte 类型常用于需要节省空间的场景,尤其是在大型数组中可以节省存储空间。例如,用于文件 I/O 或网络 I/O 操作中读取二进制数据:
java
public class ByteExample {
public static void main(String[] args) {
byte b = 100;
System.out.println("Byte value: " + b);
}
}
short
short 类型是 16 位有符号整数,表示范围是 -32768 到 32767。通常在需要节省内存而比 byte 的范围更大时使用。
java
public class ShortExample {
public static void main(String[] args) {
short s = 10000;
System.out.println("Short value: " + s);
}
}
int
int 类型是 32 位有符号整数,表示范围是 -2147483648 到 2147483647。int 是 Java 中使用最多的整数类型,因为它在大多数情况下足够大。
java
public class IntExample {
public static void main(String[] args) {
int i = 100000;
System.out.println("Int value: " + i);
}
}
long
long 类型是 64 位有符号整数,表示范围是 -9223372036854775808 到 9223372036854775807。当 int 类型不够用时,long 类型是一个很好的选择。在使用 long 类型时,需要注意在数值后面加上 L。
java
public class LongExample {
public static void main(String[] args) {
long l = 100000L;
System.out.println("Long value: " + l);
}
}
浮点类型
float
float 类型是 32 位单精度浮点数,表示范围是 1.4E-45 到 3.4028235E38。通常在节省内存并且需要处理浮点数时使用 float。需要在数值后加上 f。
java
public class FloatExample {
public static void main(String[] args) {
float f = 10.5f;
System.out.println("Float value: " + f);
}
}
double
double 类型是 64 位双精度浮点数,表示范围是 4.9E-324 到 1.7976931348623157E308。double 是 Java 中默认的浮点类型,用于大多数的浮点计算。
java
public class DoubleExample {
public static void main(String[] args) {
double d = 10.5;
System.out.println("Double value: " + d);
}
}
字符类型
char
char 类型是 16 位无符号 Unicode 字符,范围是 0 到 65535。char 用于表示字符数据。
java
public class CharExample {
public static void main(String[] args) {
char c = 'A';
System.out.println("Char value: " + c);
}
}
布尔类型
boolean
boolean 类型表示一个位的信息,只能取值 true 或 false。在 Java 中,boolean 类型常用于条件判断。
java
public class BooleanExample {
public static void main(String[] args) {
boolean bool = true;
System.out.println("Boolean value: " + bool);
}
}
包装类
Java 为每种基本类型提供了对应的包装类,包装类允许基本类型作为对象使用,提供了许多实用的方法。包装类的一个常见用途是将基本类型与泛型类一起使用,因为泛型类不支持基本类型。
java
public class WrapperExample {
public static void main(String[] args) {
Integer intObj = Integer.valueOf(100);
Double doubleObj = Double.valueOf(10.5);
System.out.println("Integer object: " + intObj);
System.out.println("Double object: " + doubleObj);
}
}
性能比较
在使用基本数据类型与其包装类时,性能上会有显著差异。基本数据类型比包装类占用的内存更少,且不涉及对象的创建和垃圾回收。下面是一个基本类型和包装类之间的性能对比示例:
java
public class PerformanceExample {
public static void main(String[] args) {
long startTime = System.nanoTime();
int sum1 = 0;
for (int i = 0; i < 1000000; i++) {
sum1 += i;
}
long endTime = System.nanoTime();
System.out.println("Time taken with int: " + (endTime - startTime) + " ns");
startTime = System.nanoTime();
Integer sum2 = 0;
for (int i = 0; i < 1000000; i++) {
sum2 += i;
}
endTime = System.nanoTime();
System.out.println("Time taken with Integer: " + (endTime - startTime) + " ns");
}
}
在这个例子中,使用 int 的循环显著比使用 Integer 的循环快,因为 Integer 对象需要额外的内存开销和对象操作。
结语
理解 Java 的基本数据类型及其包装类对于编写高效、可靠的 Java 程序至关重要。在实际开发中,选择合适的数据类型不仅能节省内存,还能提高程序的性能。
?
猜你喜欢
- 2024-11-06 Java后端精选基础教程:Java 中的基本数据类型「连载 6」
- 2024-11-06 深圳尚学堂Java培训:Java 基本数据类型。
- 2024-11-06 你真的理解 Java 的基础数据类型吗
- 2024-11-06 讲给小白的JAVA基础课(二)基本数据类型
- 2024-11-06 金蝶一面:Java基本数据类型有哪些?包装类型的常量池技术了解么
- 2024-11-06 Java语言提供了8种基本数据类型,你知道吗?
- 2024-11-06 JAVA 基本数据类型 Java基本数据类型有哪些
- 2024-11-06 四类八种基本数据类型 四类基本数据结构的含义
- 2024-11-06 Java的数据类型 Java的数据类型在不同平台的长短不同
- 2024-11-06 java基础学习——数据类型 java 数据类型有哪几种
- 05-14CSS基础知识(一) CSS入门
- 05-14CSS是什么? CSS和HTML有什么关系?
- 05-14什么是CSS3?
- 05-14CSS如何画一个三角形?
- 05-14初识CSS——CSS三角制作
- 05-14Wordpress建站教程:给图片添加CSS样式
- 05-14HTML和HTML5,css和css3的区别有哪些?
- 05-14Html中Css样式Ⅱ
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)