史上最全讲解:JAVA中的基本数据类型及其转换

史上最全讲解:JAVA中的基本数据类型及其转换


​ 计算机编程语言是处理数据的,处理的数据必须要有明确的类型。Java中的数据类型主要分为基本数据类型和引用数据类型,不同的数据类型相互之间可以转化(基本数据类型中布尔类型除外)。

1.数据类型简介

1.1基本数据类型

​ JAVA中的基本数据类型主要包括四类八种。表示如下:

数据类型表示方法字节数比特位范围
字节型byte18-2^7 ~ 2^7-1,-128~127
短整型short2162^15 ~ 2^15 -1,约-3万~3万
整型int4322^31 ~ 2^31 -1,约-21亿~21亿
长整型long8642^63 ~ 2^63-1,很大!
单精度型float432有效位数7位,很大!
双精度型double864有效位数15位,很大很大!!!
字符型char2160~2^16,约0 ~ 6万
布尔型boolean1true,false

注意事项:

  • 整型默认的是int类型,浮点型默认的是double类型,字符型默认为’’,布尔型默认为false;

  • byte、short和char只要数值范围不超过各自的范围,即可以通过赋值语句赋值。

    public class Test{
    	public static void main(String[] args){
    		byte b = 1;//1为int类型并且没有超出byte类型的范围可以转化(赋值)
    		short s = 2;//2为int类型并且没有超出short类型的范围(赋值)
    		System.out.println(b);
    		System.out.println(s);
    	}
    }
    

在这里插入图片描述

  • 定义一个长整型时,当数字范围超过了int类型的范围时(-21亿~21亿),要在数字末尾加上L,定义一个单精度类型时要在末尾加上F。

    public class Test{
    	public static void main(String[] args){
    		long L = 10000000000;//100亿默认是int类型,超出了int的范围(-21亿~21亿)不能自动转成                                long长整型
    		float f = 3.14;//3.14默认是双精度double类型,不能自动转成单精度float类型
    		System.out.println(L);
    		System.out.println(f);
    	}  
    }
    

在这里插入图片描述
改正后的代码如下:

public class Test{
	public static void main(String[] args){
		long L = 10000000000L;//100亿默认是int类型,超出了int的范围(-21亿~21亿)不能自动转成long长整型
		float f = 3.14F;//3.14默认是双精度double类型,不能自动转成单精度float类型
		System.out.println(L);
		System.out.println(f);
	}
}

在这里插入图片描述

1.2引用数据类型

​ 应用数据类型主要包括以下三种:类、接口、数组


2.数据类型转换

​ 在JAVA编程中,遇到数据不可避免的会发生数据类型的转换。数据类型的转换主要包括以下两种:自动转换类型和强制转换类型。基本数据类型的范围从小到大表示如下:

byte < short < char < int < long < float < double

注意:布尔类型不参与数据类型转换

2.1 自动转换类型

  • 从小到大会发生自动类型转换

    public class Test{
    	public static void main(String[] args){
    		long L = 1000000000;//10亿默认是int类型,在int的范围(-21亿~21亿)可以自动转成long                                长整型
    		System.out.println(L);
    	}
    }
    

在这里插入图片描述

  • 多个数据类型的数据参与计算,计算的结果数据类型会自动提升为最大类型

    public class Test{
    	public static void main(String[] args){
    		byte b = 1;
    		short s = 2;
    		double d = 3.0;
    		double result = b + s + d;
    		System.out.println(result);
    	}
    }
    

在这里插入图片描述

  • 如果参与计算的数据中最大类型没有int大(为byte、short、char),那么计算结果会自动提升为int 类型

    public class Test{
    	public static void main(String[] args){
    		byte b = 1;
    		short s = 2;
    		short result = b + s;//计算结果会自动提升为int类型,用short类型来接收会出错
    		System.out.println(result);
    	}
    }
    

在这里插入图片描述

public class Test{
	public static void main(String[] args){
		byte b = 1;
		short s = 2;
		int result = b + s;//改为int类型来接收计算的结果不会出错
		System.out.println(result);
	}
}

在这里插入图片描述

  • 特殊情况,给byte、short和char类型赋值的时候,只要int类型的数据在其数据范围之内即可发生自动转换。

    (由于整型数据默认的是int类型,故赋值的时候看似发生了“大转小”自动转换的情况,由于java的底层是C,其实在存储 和计算的时候这些都是int类型)

    public class Test{
    	public static void main(String[] args){
    		char c = 97;//int类型自动转换成char类型并在ascii码中查到到对应的字符赋给c
    		System.out.println(c);
    	}
    }
    

在这里插入图片描述

  • 赋值的时候先检查类型是否允许,类型如果允许再检查是否存在变量。

    public class Test{
    	public static void main(String[] args){
    		byte b = 12;
    		char c = b;//char类型接收会报错
    		System.out.println(c);
    	}
    }
    

在这里插入图片描述

public class Test{
	public static void main(String[] args){
		final byte b = 12;//将b定义为一个常量不会报错
		char c = b;
		System.out.println(c);
	}
}

[

public class Test{
	public static void main(String[] args){
		byte b = 12;
		short c = b;//改为short类型接收数据不会报错
		System.out.println(c);
	}
}

在这里插入图片描述

2.2 强制转换类型

​ 数据类型从大到小, 需要强制数据类型转换,可能会损失精度,格式如下:

​ 小变量数据类型 小变量名 = (小变量数据类型)大变量数值

  • 范围内的强制数据类型转换,精度不会损失

    public class Test{
    	public static void main(String[] args){
    	    int a = (int) 100.1;//强制转换
    		System.out.println(a);
    	}
    }
    

在这里插入图片描述

  • 范围之外的数据类型转换,损失精度

    public class Test{
    	public static void main(String[] args){
    	    byte b = (byte)128;//128超出了byte的范围(-128~127)
    		System.out.println(b);
    	}
    }
    

在这里插入图片描述

成圆环形状从负数开始往回过对应位数

  • char类型的输出较为特殊

    public class Test{
    	public static void main(String[] args){
    	    char c = 'a' + 1;
    		System.out.println(c);//c是char类型的计算得到int类型数值后会在
                                  //ascii码表中查找对应的字符
    		System.out.println('a'+1);//计算得到的数值是int类型直接输出
    	}
    }
    

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值