笔记7:Java数据类型转换的规则

第一条:八种基本数据类型中,除boolean 类型不能转换,剩下七种类型之间都可以进行转换

第二条:如果整数型字面量没有超出byte,short,char的取值范围,可以直接将其赋值给byte, short, char类型的变量。

//java语言规定,字面量默认当作整形处理
byte y=127;
short s=100;
//97是整形,Java语言规则,默认整形处理
//c2是char类型
char c2=97;
System.out.println(c2);//输出 a 这个字符

第三条:小容量向大容量转换称为自动类型转换,容量从小到大的排序为:byte < short (char) < int < < long < float < double, 其中short和 char都占用两个字节,但是char可以表示更大的正整数。整数型的容量都比浮点型小。

/*
关于java语言中的浮点型数据
	浮点型包括 float    4个字节   单精度
			   double   8个字节   双精度
	double更精确
	比如说:
	10.0/3 如果用float 来存储的话结果可能是3.33333
	10.0/3 如果用double 来存储的话结果可能是3.33333333

	但是需要注意的是,如果用在银行财务方面,这两种精度是远远不够的,因此
	在Java中提供了一种精度更高的类型,这种类型专门使用在财务软件方面:java.math.BigDecimal(不是基本数据类型,是引用数据类型)

	float和double存储数据的时候,都是存储的近似值,因为现实世界中的数据有无线循环小数,计算机的存储空间有限,因此只能存储近似值

	float4个字节,long类型8个字节,谁的容量大?
	任意一个浮点型都比整数型空间大(不能只看字节,float内部的构造复杂,有次幂)
	float容量>long容量
	
	Java语言中规定:任何一个浮点型数据都被当作double类型来处理
	如果想要这浮点型字面量被当作float类型处理,在字面量后面加"F"或者"f"。

	例如:1.0默认被当作double类型来处理
		  1.0F这才是float类型(1.0f)

*/
public class FloatTest01{
	public static void main(String[] args){
		//3.1415926默认被当作double类型,不存在类型转换
		double pi=3.1415926;
		System.out.println(pi);
		//float f=3.14;错误: 不兼容的类型: 从double转换到float可能会有损失
		//怎么修改上句代码了?
		float f1=3.14f;
		System.out.println(f1);
		float f2=3.14F;
		System.out.println(f2);
		float f3=(float)3.14;//强制类型转换
		System.out.println(f3);
		//运算原理:先将5转换成double类型,然后再做运算,其结果是double类型
		//大容量无法直接赋值给小容量
		//int i=10.0/5;错误: 不兼容的类型: 从double转换到int可能会有损失
		//怎么修改?
		int i=(int)10.0/5;//只保留整数部分
		System.out.println(i);//输出结果2
		int x=(int)(10.0/5);
		System.out.println(x);

	}
}

第四条:大容量转换成小容量,称为强制类型转换,编写时必须添加、强制类型转换符",但运行时可能出现精度损失,谨慎使用。

//300被默认当做int类型
//b变量是byte类型
//大容量转换成小容量,要想编译通过,必须使用强制类型转换符
//报错:IntTest04.java:8: 错误: 不兼容的类型: 从int转换到byte可能会有损失	
byte b=300;
//int类型300:00000000 00000000 00000001 00101100
//byte是1个字节,砍掉前面3个字节,剩下00101100=44
byte b=(byte)300;
System.out.println(b);//输出值是44
//150超过了byte类型的取值范围[-128到127],需要强转
//byte b=150;错误: 不兼容的类型: 从int转换到byte可能会有损失
//整型150=00000000 00000000 00000000 10010110
//强制类型转换后:byte(150)=10010110
//10010110,最高位为符号位,补码形势,转换成源码是:11101010=-106
		byte b=(byte)150;
		System.out.println(b);//输出-106

第五条: byte ,short,char类型混合运算时,先各自转换成int类型再做运算

/*
结论:byte,char,short做混合运算时,各自先转换成整型再做运算

*/
public class IntTest06{
	public static void main(String[] args){
		char c1='a';
		byte b=1;
		//这里的"+"负责求和
		//输出结果=98
		System.out.println(c1+b);
		//疑问:c1+b=98没有超过short的范围,为什么还会报错了?
		//编译的时候,只能检测到这里是一个加法运算,编译器不知道这个加法运算的结果是多少。
		//short s=c1+b; 错误: 不兼容的类型: 从int转换到short可能会有损失,说明c1+b是整型
		short s1=(short)(c1+b);
		short s2=98;//这一句编译器直接检测到了这个数值,因此不会报错
		System.out.println(s1);
		int n=1;
		//short h=n;错误:不兼容的类型: 从int转换到short可能会有损失.还是那句话,编译器检测不到n里面的值是多少
	}
}

第六条:多种数据类型混合运算,各自先转换成容量最大的那一种再做运算

long a=10L;
char c='a';
short s=100;
int i=30;
//求和
System.out.println(a+c+s+i);//输出结果:237
//int x=a+c+s+i; 错误: 不兼容的类型: 从long转换到int可能会有损失
int x=(int)(a+c+s+i);
System.out.println(x);//输出结果237
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值