【Java编程新手必备知识手册】——基本类型和包装类型


前言

大家好,我是行谦YIFO,正在学习Java编程语言。我喜欢通过写作来记录自己的学习过程,并与大家分享我的知识和经验。我相信“以教促学”,希望通过分享我的学习成果,也能帮助到其他正在学习Java的朋友。我会努力提高自己的技术水平,同时也期待与大家一起交流和进步。感谢大家的关注和支持!


一、Java的基本类型

1.1 基础数据类型介绍

Java有八种基础数据类型,它们是:

  1. byte:字节型,占用8位内存空间,取值范围为-128到127。通常用于节省内存空间的场合。
  2. short:短整型,占用16位内存空间,取值范围为-32768到32767。
  3. int:整型,占用32位内存空间,取值范围为-231到231-1。
  4. long:长整型,占用64位内存空间,取值范围为-263到263-1。
  5. float:单精度浮点型,占用32位内存空间,精确到7位小数。
  6. double:双精度浮点型,占用64位内存空间,精确到15位小数。
  7. char:字符型,占用16位内存空间,用来存储Unicode编码的一个字符。
  8. boolean:布尔型,占用1位内存空间,只有两个值,truefalse

如果超出了java的数值类型范围,在编译java文件的时候,编译器会给你报错。

以上就是Java中的八种基础数据类型,它们都有对应的包装类,如ByteShortIntegerLongFloatDoubleCharacterBoolean。在实际开发中,我们通常使用这些包装类来操作对应的基础数据类型,这在第二节会讲到。

public class DemoTest {
    public static void main(String[] args) {
        byte a = 127;
        short b = 32767;
        int c = 2147483647;
        long d = 9223372036854775807L;
        boolean e = true;
        char f = 'a';
        float g = 1.2f;
        double h = 1.2d;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        System.out.println(g);
        System.out.println(h);
    }
}

1.2 为什么Java需要不同位数的类型

在这里内存空间的大小是以字节(byte)为单位的,一个字节由8个二进制位组成。这样做的原因是,8位二进制可以表示256种不同的状态,这对于大多数常见的数据类型来说已经足够了。例如,一个字节就可以表示0到255之间的所有无符号整数,也可以表示-128到127之间的所有带符号的整数。

对于需要更大存储空间的数据类型,比如整数、浮点数和字符等,就需要多个字节来表示。例如,一个16位的整数需要两个字节来存储,可以表示0到65535之间的无符号整数,或者-32768到32767之间的带符号的整数。

此外,不同类型的变量在内存中占据的空间大小也是不同的。例如,一个字符型变量(char)占用16位内存空间,一个整型变量(int)占用32位内存空间,一个长整型变量(long)占用64位内存空间,等等。

总的来说,内存空间的大小是由数据类型的需求决定的,而数据类型的需求则是由实际应用的需求决定的。

二、Java的包装类型

2.1 包装类型介绍

在Java编程语言中,有一些基础数据类型,如int、double、boolean等。这些基础数据类型可以直接用来进行计算和比较等操作,但是它们也有一些限制,比如不能直接和其他对象一起使用,也不能作为方法的参数或返回值等。
为了克服这些限制,Java提供了一些包装类,如Integer、Double、Boolean等。这些包装类提供了更多的功能和灵活性,可以将基础数据类型转换为对象,并且可以和其他对象一起使用。
例如,如果你想在一个集合中存储一些整数,你可以使用ArrayList<Integer>而不是ArrayList<int>,因为后者是不允许的。同样地,如果你想将一个整数传递给一个方法,你可以使用Integer对象而不是int变量,因为后者是不允许的,ArrayList暂时不了解也没关系。
除了提供更多的功能和灵活性之外,包装类还提供了一些其他的好处。例如,它们可以自动装箱和拆箱,这意味着你可以在需要的时候将基础数据类型转换为对象,而在不需要的时候再将其转换回基础数据类型。

2.1 包装类型实操理解

public class DemoTest {

    public static int add(Integer a, Integer b) {
        return a + b;
    }
    public static void main(String[] args) {
        Integer num1 = 3;
        Integer num2 = 4;

        int sum = add(num1, num2); // 调用add方法

        System.out.println("这两个数字之和是: " + sum);
    }
}

在这个方法中,我们直接将两个Integer参数相加,并返回它们的和。这里没有显式地进行拆箱或装箱操作,因为Java编译器会自动为我们完成这些操作。

装箱就像把一群小动物(基础数据类型)关进笼子(包装类),以便于管理和运输。在这个过程中,我们需要选择合适的笼子(包装类),并将小动物(基础数据类型)放进去。而拆箱则是从笼子里取出小动物(基础数据类型)。在这个过程中,我们需要打开笼子(包装类),并取出里面的小动物(基础数据类型)。
我们也可以不通过Java自动拆箱装箱,可以调用对应的装箱方法:Integer.valueOf

int num = 5; // 基础数据类型int
Integer integer = Integer.valueOf(num); // 装箱操作,将int转换为Integer

同样地,如果我们有一个Integer对象,如果我们想要将其转换为int类型,就可以使用intValue()方法进行拆箱操作,如下所示,其他的基础类型也有类似的方法:

Integer integer = new Integer(5); // 包装类Integer
int num = integer.intValue(); // 拆箱操作,将Integer转换为int

2.3 包装类型的高级应用

public class DemoTest {
    public static void main(String[] args) {
        Box<Integer> intBox = new Box<>(10);
        System.out.println(intBox.getValue()); // 输出 10

        Box<String> stringBox = new Box<>("Hello");
        System.out.println(stringBox.getValue()); // 输出 Hello
    }
}

public class Box<T> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

在这个例子中,我们定义了一个名为 Box 的类,它有一个泛型参数 T,表示它可以存储任何类型的数据。然后我们在 main 方法中创建了两个 Box 对象,一个是整数类型,另一个是字符串类型。这样我们就可以在同一个程序中使用不同类型的 Box 对象,而不需要为每种类型都创建一个新的类了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值