【Java SE】数据类型及其转换

目录

数据类型

1.基本数据类型

2.引用数据类型

类型转换

1.自动类型转换

2.强制类型转换

3.类型提升


数据类型

Java中数据类型分为基本数据类型引用数据类型

1.基本数据类型

基本数据类型分为四类:整型(byte,short,int,long),浮点型(float,double),字符型(char),布尔型(boolean)

数据类型关键字内存占用范围包装类型默认值
字节型byte1字节-128~127Byte0
短整型short2字节-32768~32767Short0
整型int4字节-2^31~2^31-1Integer0
长整型long8字节-2^63~2^63-1Long0L
单精度浮点型float4字节
一般不关注
Float0.0f
双精度浮点型double8字节
一般不关注
Double0.0d
字符型char2字节0~65535Character‘u0000’
布尔型boolean没有明确规定true和flaseBooleanflase

注意:

1.Java中数据类型所占内存大小不分32位还是64位。

2.在字面常量中整型默认为 int,浮点型默认为 double;整型后面加上 L 或 l 为 long,浮点型后面加上 F 或 f 为 float 。

3.使用变量前需初始化,初始化的值不能超过对应类型的表示范围

4.Java中 char 类型是一个单一的 16 位 Unicode 字符(表示的字符种类比Ascall更多)

我们可以通过包装类获取对应类型的信息:

public class Test {  
    public static void main(String[] args) {  
        // byte  
        System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);  
        System.out.println("包装类:java.lang.Byte");  
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);  
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);  
        System.out.println();  

        // short  
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);  
        System.out.println("包装类:java.lang.Short");  
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);  
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);  
        System.out.println();  
  
        // int  
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);  
        System.out.println("包装类:java.lang.Integer");  
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);  
        System.out.println();  
  
        // long  
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);  
        System.out.println("包装类:java.lang.Long");  
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);  
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);  
        System.out.println();  
  
        // float  
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);  
        System.out.println("包装类:java.lang.Float");  
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);  
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);  
        System.out.println();  
  
        // double  
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);  
        System.out.println("包装类:java.lang.Double");  
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);  
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);  
        System.out.println();  
  
        // char  
        System.out.println("基本类型:char 二进制位数:" + Character.SIZE);  
        System.out.println("包装类:java.lang.Character");   
        System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);  
        System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);  
    }  
}

打印结果如下:

2.引用数据类型

Java中引用数据类型是一种内部类型,是对所用自定义类型和数组引用的统称,并非特指某种类型。引用数据类型分为3种:类,接口,数组;他们的默认值均为null。 

类型转换

数据类型转换必须满足如下规则:

  • 1. 不能对boolean类型进行类型转换。

  • 2. 不能把对象类型转换成不相关类的对象。

  • 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 4. 转换过程中可能导致溢出或损失精度  

1.自动类型转换

代码不需要经过任何处理,在代码编译时,编译器会自动进行处理
特点: 数据范围小的转为数据范围大的 时会自动进行
System.Out.println(1024); // 整型默认情况下是int
System.Out.println(3.14); // 浮点型默认情况下是double
int a = 100; long b = 10L;
b = a; /* a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值*/
a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全 
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte 
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

2.强制类型转换

当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的。
int a = 10; long b = 100L; 
b = a; // int-->long,数据范围由小到大,隐式转换 
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换 
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
boolean flag = true; 
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容

3.类型提升

1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .
int a = 10; long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c); /*编译报错:byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int,这时赋给c就会出错*/
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记得开心一点啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值