Java 八大基本数据类型详细整理及类型转换解析

数据类型

概述

数据类型: Java是一门强类型语言,针对每一种数据都提供了对应的类型

数据类型的分类

八大基本数据类型
整数类型    字节数    取值范围
byte     1      -128~127
short     2     -32768 ~ 32767
int      4     -2^31 ~ 2^31 - 1
long     8     -2^63 ~ 2^63 - 1

小数类型
float      4     -3.403E38 ~ 3.403E38
double     8     -1.798E308~1.798E308

注意:

1.虽然小数表示的范围特别大,但是永远不能够存储所有的小数,因为小数存在无限不循环小数
2.同样是4/8个字节的小数类型取值范围大于整数类型,原因是小数和整数的存储形式不一样
3.在处理金融相关项目的时候,小数的计算要求精度非常高,那么使用float或者double来表示会出现精度问题,后期考虑使用BigDecimal来处理 

布尔类型
boolean     1     false true

字符类型
char       2     0 ~ 65535 【Java使用Unicode编码的范围】

引用数据类型
类 (class) String
接口 (interface)
数组 ([])

代码示例

public class DataTypeDemo {
	public static void main(String[] args){
		// 定义一个byte类型的变量
		byte by = 20;
		System.out.println(by);
		
		// by = 130; // -128~127
		// System.out.println(by);
		
		// short s = 32768;
		// System.out.println(s);
		
		long l = 1111111111111111111L;
		System.out.println(l);
		
		float f = 2.5f;
		System.out.println(f);
		
		double d = 3.5;
		System.out.println(d);
		
		boolean bool = false;
		System.out.println(bool);
		
		// bool = 0b00000001;
		// System.out.println(bool);
		
		char ch = 'a';
		System.out.println(ch);
	}
}

类型转换

概述

数据类型转换
当运算符两边类型不一致的时候,需要进行类型转换
类型转换的依据: 取决数据的取值范围
在这里插入图片描述

从上图可以观察出以下注意事项:
1.boolean类型不能够参与类型转换
2.char和byte/short只有交集关系,没有子集关系
3.数据类型的数据范围顺序:
byte -> short -> int -> long -> float -> double
char ->

类型转换常见的9中情况

1.自动类型转换 大类型数据 = 小类型数据
将小类型的数据转换成大类型数据,系统会自动转换

2.强制类型转换 小类型数据 = 大类型数据
将大类型的数据转换成小类型的数据,会编译报错
解决办法: 强制类型转换

格式:
目标类型 变量名 = (目标类型) 被转换的类型;

强制类型转换会出现的问题:
1.精度的丢失
2.数据的溢出
3.byte/short/char特例
4.byte/short 和 char 参与转换,都需要强制类型转换
5.表达式类型提升
当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换
6.当byte short char 之间参与运算的时候,底层都会转换成int类型来计算
7.boolean类型不能够参与运算和转换
8.字符串在参与运算中的转换问题,字符串相加是拼接操作
9.变量计算和常量计算问题
变量相加,编译器无法判断具体的结果
常量相加,在编译时期,系统就会运算结果

代码示例

public class DataTypeConvertDemo {
	public static void main(String[] args){
		// 1.自动类型转换
		double d = 2.5f;
		System.out.println(d);
		// 2.强制类型转换
		double d2 = 2.6;
		// int i = d2; // 不兼容的类型: 从double转换到int可能会有损失
		
		// 目标类型 变量名 = (目标类型) 被转换的类型;
		int i = (int)d2; // 1.精度的丢失
		System.out.println(i);
		
		// 2.数据的溢出
		// byte by = 128; //  不兼容的类型: 从int转换到byte可能会有损失
		byte by = (byte)129; // -127
		System.out.println(by); 
		
		// 3.byte/short/char特例
		// 由于120正好在byte的范围内,所以编译帮助我们做了这个转换
		// 但是如果一旦超出了byte的范围,那么系统就不会帮助我们转换,会出错
		byte by2 = 120;
		System.out.println(by2);
		
		short s = 32767;
		System.out.println(s);
		
		// 97 正好在char的范围【0~65535】内,所以系统会帮助我们转换
		char ch = 97;
		System.out.println(ch);
		
		// 4.byte/short 和 char 参与转换,都需要强制类型转换
		byte by3 = 97;
		char ch2 = (char)by3;
		System.out.println(ch2);
		
		char ch3 = 'b';
		byte by4 = (byte)ch3;
		System.out.println(by4);
		
		// 5.表达式类型提升
		// 当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换
		int i2 = 100;
		// i2 = i2 + 2.5; // 不兼容的类型: 从double转换到int可能会有损失
		i2 = (int)(i2 + 2.5);
		System.out.println(i2);
		
		// 6.当byte short char 之间参与运算的时候,底层都会转换成int类型来计算
		// 其实Java是强语言类型,针对整数类型划分出来很多类型【byte short int char】,
		// 其实在其他语言里面只有整数和小数, Java针对【byte short int char】计算都是先转换成同一种类型int类型再进行运算
		short ss = 25;
		byte bb = 30;
		ss = (short)(bb + ss); //  不兼容的类型: 从int转换到short可能会有损失
		System.out.println(ss);
		
		char ch4 = 'a';
		byte by5 = 1;
		char ch5 = (char)(ch4 + by5); // 错误: 不兼容的类型: 从int转换到char可能会有损失
		System.out.println(ch5);
		
		char ch6 = 'a';
		byte by6 = 98;
		System.out.println(ch6 < by6);
		
		// 7.boolean类型不能够参与运算和转换
		boolean bool = false; // 0000 0000 + 1 = 0000 0001
		// boolean i3 = bool + 1; //  错误: 二元运算符 '+' 的操作数类型错误
		// System.out.println(i3);
		
		// 8.字符串在参与运算中的转换问题,字符串相加是拼接操作
		String str = "2222";
		str = "2222" + false + 2.5 + 2 + 'x';
		System.out.println(str);
		
		// 9.变量计算和常量计算问题
		// byte by7 = 1;
		// short s7 = 97;
		// s7 = by7 + s7;
		// System.out.println(s7); // wrong

		// byte s7 = 1 + 97;
		// System.out.println(s7); // right
		
		// java文件 编译的时候 会优化代码,会将s7结果计算出来,所以真正在运行的时候应该是这样的: byte s7 = 98;

		// short s7 = 97;
		// s7 = 1 + s7;
		// System.out.println(s7);  // wrong
		
		final byte by7 = 1;
		final short s7 = 97;
		short s8 = by7 + s7;
		System.out.println(s8); // right 
		
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值