玖叶教程网

前端编程开发入门

Java 中的几种基本数据类型了解么?


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 节有提到)。


注意:


  1. Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析。
  2. 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 程序至关重要。在实际开发中,选择合适的数据类型不仅能节省内存,还能提高程序的性能。

?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言