Java数据类型总结

一、Java数据类型的分类

1、基本数据类型

​ 8种:整型系列(byte,short,int,long)、浮点型(float,double)、单字符型(char)、布尔型(boolean)

2、引用数据类型

​ 类、接口、数组、枚举…

二、Java的基本数据类型

1、整型系列

(1)byte:字节类型

	占内存:1个字节
	存储范围:-128~127

(2)short:短整型类型

	占内存:2个字节
	存储范围:-32768~32767

(3)int:整型

	占内存:4个字节
	存储范围:-2的31次方 ~ 2的31次方-1

(4)long:整型

	占内存:8个字节
	存储范围:-2的63次方 ~ 2的63次方-1

	注意:如果要表示某个常量数字它是long类型,那么需要在数字后面加L

2、浮点型系列(小数)

(1)float:单精度浮点型

	占内存:4个字节
	精度:科学记数法的小数点后6~7位

	注意:如果要表示某个常量数字是float类型,那么需要在数字后面加F或f

(2)double:双精度浮点型

	占内存:8个字节
	精度:科学记数法的小数点后15~16位

3、单字符类型

	char:字符类型
	占内存:2个字节
	Java中使用的字符集:Unicode编码集

字符的三种表示方式:
(1)‘一个字符’

	例如:'A','0','尚'

(2)转义字符

	\n:换行 \r:回车 \t:Tab键 \\:\ \":” \': \b:删除键Backspace

(3)\u字符的Unicode编码值的十六进制型

	例如:\u5c1a代表'尚'

4、布尔类型

	boolean:只能存储true或false

三、 进制

1、进制的分类:

(1)十进制

	数字组成:0-9
	进位规则:逢十进一

(2)二进制

	数字组成:0-1
	进位规则:逢二进一

(3)八进制

	数字组成:0-7
	进位规则:逢八进一

(4)十六进制

	数字组成:0-9,a~f(或A~F)
	进位规则:逢十六进一

2、请分别用四种类型的进制来表示10,并输出它的结果:

(1)十进制:正常表示

	System.out.println(10);

(2)二进制:0b或0B开头

	System.out.println(0B10);

(3)八进制:0开头

	System.out.println(010);

(4)十六进制:0x或0X开头

	System.out.println(0X10);

3、为什么byte是-128~127?

	1个字节:8位
	0000 0001 ~ 0111 111 ==> 1~127
	1000 0001 ~ 1111 1111 ==> -127 ~ -1
	0000 0000 ==>0
	1000 0000 ==> -128(特殊规定)

	解释:计算机数据的存储
		计算机数据的存储使用二进制补码形式存储,并且最高位是符号位,1是负数,0是正数。
	
	规定:
		正数的补码与反码、原码一样,称为三码合一;
		
		负数的补码与反码、原码不一样:
		负数的原码:把十进制转为二进制,然后最高位设置为1
		负数的反码:在原码的基础上,最高位不变,其余位取反(0变1,1变0)
		负数的补码:反码+1

	
	例如:byte类型(1个字节,8位)
		25 ==> 原码 0001 1001 ==> 反码 0001 1001 -->补码 0001 1001
		-25 ==>原码 1001 1001 ==> 反码1110 0110 ==>补码 1110 0111
		
		底层是用加法代替减法:-128==》-127-1==》-127+(-1)
						 -127- -1 ==> -127 + 1

在这里插入图片描述

4、为什么float(4个字节)比long(8个字节)的存储范围大?为什么double(8个字节)比float(4个字节)精度范围大?

	因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学记数法,然后只保存:
	(1)符号位(2)指数位(3)尾数位
	
	其单精度float的存储方式如下图所示:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20191014133702333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMTU2MTc2OTAwNTA=,size_16,color_FFFFFF,t_70)

	而双精度double的存储方式为:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20191014133712119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpMTU2MTc2OTAwNTA=,size_16,color_FFFFFF,t_70)

四、基本数据类型的转换

1、自动类型转换

(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时,

	byte->short->int->long->float->double
				char->

	int i = 'A';   //char自动升级为int 
	double d = 10;   //int自动升级为double

(2)当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算

	int i = 1;
	byte b = 1; 
	double d = 1.0;
	double sum = i + b + d;   //混合运算,升级为double

(3)当byte,short,char数据类型进行算术运算时,按照int类型处理

	byte b1 = 1; 
	byte b2 = 2; 
	byte b3 = (byte)(b1 + b2);   //b1 + b2自动升级为int
	char c1 = '0'; 
	char c2 = 'A'; 
	System.out.println(c1 + c2);    //113

(4)boolean类型不参与

2、强制类型转换

(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换

	double->float->long->int->short->byte
							->char
	
	提示:有风险,可能会损失精度或溢出
	
	double d = 1.2; 
	int num = (int)d;    //损失精度
	int i = 200; 
	byte b = (byte)i;    //溢出

(2)boolean类型不参与
(3)当某个值想要提升数据类型时,也可以使用强制类型转换

	int i = 1; 
	int j = 2; 
	double shang = (double)i/j;
	
	提示:这个情况的强制类型转换是没有风险的。

3、特殊的数据类型转换

	任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型

	System.out.println("" + 1 + 2);    //12

	但是String类型不能通过强制类型()转换,转为其他的类型

	String str = "123"; int num = (int)str;    //错误的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值