初喝咖啡 - java的数据类型及用法

本文详细介绍了Java中的基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean),以及它们的取值范围和使用注意事项。同时,还探讨了类型转换,特别是自动类型转换和强制类型转换的规则和陷阱。此外,文章还提到了类型提升在不同类型运算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初喝咖啡 - java的数据类型及其用法

首先,我们先来了解一下什么是常量。

常量,常量,顾名思义便是不变的量,我们请看以下代码:>

public class BlogData {
   public static void main(String[] args){
        System.out.println(3.14);
        System.out.println('a');
        System.out.println("你好");
        System.out.println(true);
        System.out.println(520)
   }
}

其中的3.14, 字符’a’, “你好"等都是常量,我们称其为字面常量,程序运行的结果为

在这里插入图片描述

实际上,这里的3.14我们称其为浮点数常量,字符‘a“为字符常量,”你好“为字符串型常量,这就引出了我们的数据类型。

java的数据类型有以下几种:

一.基本数据类型:

1.char字符型2.boolean布尔型、3.short短整型4.int整型5.float单精度浮点数6.double双精度浮点数7.byte字节型8.long长整型

二.引用数据类型

1.类、2.接口、3.数组

接下来我们对其用法及细节进行总结。

byte

字节型数据类型在内存中只占用一个字节,用byte创建的变量在内存中只占8个bit位,又在java中,最高位表示符号位(最高位为1表示负数,最高位为0表示负数)

在这里插入图片描述

因此 byte所表示的数据范围

正数 00000000 ~ 01111111 (补码的形式) 即是 0 ~ 127.

负数所表示的范围为

10000000 ~ 11111111(原码的形式)

而11111111(原码)表示为 -127

而10000000(原码)表示为-0,而-0并没有意义,因此规定,10000000 为 2的-7次方, 即-128. 因此 byte的数据类型为-128 ~ 127

因此,我们在定义byte类型的变量时,数据不能超过这个范围,否则就要自己进行强制类型转换。

如:
在这里插入图片描述

若我们对byte b = 128 改为 byte b = (byte) 128,所得到的结果会是什么呢?
在这里插入图片描述

这里所得到的-128,实际上是这样子得到的。
在这里插入图片描述

即byte b = (byte)128, 即127 + 1,所得到的值便是-128了,前提是要进行强制类型转换。

整型家族
1.short类型

short类型在java中占两个字节,其存放数字所允许的范围为-2^15 ~ 2 ^ 15 - 1, 我们来看其基本使用:>

在这里插入图片描述

此外,也要注意的是使用short类型时,不能超过其范围,例如:>

在这里插入图片描述

编译器会直接报错,平常使用时要注意这一点。

2.int类型

在这里插入图片描述

int类型在java中占内存4个字节,其存放数字所允许的范围为 -2^31 ~ 2 ^ 31 - 1 这个范围可以说是相当大了,也是我们在使用整型时最常使用的一种数据类型,其基本使用方式也与上述short类型相似。

刚刚报错的代码,如果我们把数据类型换成int类型,就不会报错了。

3.long类型

long类型在java中占内存8个字节,可以存放的数据进一步扩大,int类型所存放不下的东西它也可以存放。其数据范围为: -2 ^ 63 ~ 2^ 63-1.其基本使用方式也和int类型是一样的:

在这里插入图片描述

这便是其最基本的使用方式了,即用long类型创建一个变量b。

4.char类型

char类型在java中占内存2个字节,是的,2个字节,这一点和c语言明显不同,所占内存空间的提升,也意味着其所存放的数据变大,在java中,字符在内存中是以unicode形式编码的。这点特殊性也意味着char类型的范围与别人不同,在java中,char类型变量的范围为

0 ~ 2^16 -1 , 那为什么还要将char类型放在整型家族呢? 那是因为我们可以将整型赋值给char类型的变量(前提是在范围内),电脑会将其对应到unicode所对应到的字符。举例:

这里将97赋值给了char类型的a,因为97对应到unicode编码中为字符’a’, 因此,也就输出所对应的字符了。

在这里插入图片描述

浮点型变量

在java中,浮点型类型有两种。 一个是float,另一个是我们的double,我们在下文对其介绍。

要注意的是,两种类型都符合IEEE 754 标准。

float

float在java中占内存4个字节,我们来看以下代码来演示一下float类型的使用。

public class Test {
    
    public static void main(String[] ars){
        float a = 3.14;
    }
}

请问上图代码是否正确??

答案是错误的,因为3.14在java中默认是double类型的数据,而double类型的数据是无法赋值给float的,因此,我们需要在3.14后面家一个f或F,以此来说明其为float类型。


在这里插入图片描述

double

double类型的变量在java中所占用的内存空间为8个字节,因此其存放的数据比float精度更高,下面我们来看几段代码:>

public class Test {


    public static void main(String[] ars){

        double a = 2.7;
        double b = 8.1 / 3;
        if (a > b){
            System.out.println("正确的");
        } else {
            System.out.println("错误的");
        }
    }
}

这段代码输出的结果为?

在这里插入图片描述

这里说明的是,java中浮点数的内存布局遵守IEEE 754 标准, 尝试使用有限的空间来表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是一个近似值,并不是精确值。我们可以将b打印出来看看它的值为多少:>

在这里插入图片描述

是一个无限接近2.7的小数,但并没有达到2.7,因此并不会走if语句。

布尔类型

布尔类型是java中专门用来表示条件真假的类型,例如:>

在这里插入图片描述

这里的a就是我们所创建的布尔变量,其被我们赋予了true值,但要知道的是,布尔类型也就只有两种取值,一种是true,一种是false,true表示真,false表示假。

此外,boolea类型并不能与int类型相互转换,例如

System.out.println(true + 1)

这句代码是错误的,编译器也会报错。

最后,我们来讲一下java当中的类型转换:

请看以下这几段代码:>

public class Test {


    public static void main(String[] args) {
        int a = 10;
        long b = 100L;
        a = b;
        b = a;
    }
}

这段代码是否正确?

答案是错误的,问题出在于这句代码

在这里插入图片描述

其中a是int类型, b是long类型, long类型是无法赋值给a类型(除非强制类型转换), 这是因为精度的问题。

我们来看一下java中自动类型转换的特点:>

在这里插入图片描述

从左到右,依次是自动转换的方向,例如:>

在这里插入图片描述

此处我们将a的值赋给b,编译器会将a提升为short类型,再将其赋给b;

若将b赋值给a,则是错误的。因为b的精度比a高,自动转换无法进行。

在这里插入图片描述

类型提升

此外,不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。 例如:>

在这里插入图片描述

此处a为int类型,而b为long类型, a + b 会将其a的类型提升为long类型后进行计算,但其总体仍然为long类型,long类型在此处无法赋值给int类型,因此,编译会出错。

此外,对于比4个字节小的类型,会先提升成4个字节的int类型,再进行计算。例如:>

public class Test {


    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        byte c = a + b;
    }
}

此处a 和 b 为byte类型,但是a + b 会先将a和b都提升成int, 总体的运算结果类型也为int类型,int在此处是无法赋值给c的。

本文完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值