2021-03-08

javaSE之详解类型转换

注释:刚开始认真学习java,今天学会了一些知识,准备第一次在csdn上写,就当是一个成长日子,也希望多多指导,谢谢!
1.隐式类型转换
规则:小的数据类型可以直接转换成大的数据类型,机器可以自动转换。
类型具体的大小排序:byte<short=char<int<long<float<double
(注意boolean不会进行比较,所以他可以被理解为1个字节也可以理解为1位。
可能还有困惑,为什么long为8字节,但是float只有4字节,但是float的范围确大于long呢?我了解到的是long是8个字节,但是机器是通过二进制进行存储的,换算成10进制基本没有损失。但是float是小数,后面的小数部分有位权,他换算出来会损失精度。所以float是大于long的。嘿嘿具体可以看大佬的详解 //https://www.bilibili.com/read/cv5912278)。

**举例** byte a =10;
              int   b =a ;

用途 比如两个软件进行交互, 对方发给你一个整数, 我就需要用long类型去接收。因为你不确定他给传的是一个多大的证书,所以你应该 不管他发给你多大的证书, 你都应该接收, 你就可以用 最大的整数类型 long去接收。
运算中的隐式类型转换 (运算的原理:不同类型的数据进行运算,要先统一为同类型的数据,然后进行运算,否则不能运算)
1.比int类型大的数据:两个不同数据进行运算,小类型的数据会自动转换为大类型的数据(由jvm进行自动转换),然后进行运算。


```java
public class demo14{
	public static void main(String[] args){
		long i = 3L;
		//int d =i+3;编辑报错,jvm会自动把3转换为Long类型,在进行计算
		int d = (int)i+3;
		System.out.println(d); d=6}
}

2.比int类型小的数据,在进行计算之前为提前转换为int类型在进行转换	

```java
public class demo15{
	public static void main(String[] args){
		short i =3;
		byte  k =5;
		//short j = i + k;编译报错
		//short j =  i+ (short)k;//编译报错
		short j  =  (short)(i+k);
		System.out.println(j);
	}
}

2.强制类型转换
规则:是从大范围的数据类型 强制转到 小范围的数据类型
1:明确能转过去,数据是正确的, 这时候可以强制类型转换。
int a = 10;
byte b = (byte)a;

2:不推荐你使用的, 明知道转过去 撑不了这么大的数据, 还要继续转
int a = 200;
byte b = (byte)a; // a 已经不是200了, 不确定的数字

3:强化去除小数点后面的数据
double d = 3.14;
int a = (int) d; // a 就是3了。
类型转换注意的事项
1.boolean不参与任何转换只有true和false;
boolean i =true;
//int p = int(i)+3;编译报错
2.常量优化机制
1.写一个整数常量的时候,整数常量也是有数据类型的,int类型。
System.out.println(10);//10是常量同时也是int类型的数据
2. 比int小的类型才有常量优化机制:
byte a =10;
10是int类型不用强转就可以赋值给byte类型,其实是因为jvm在底层已经转换了
byte a = byte(10);
**注意:**只能是常量才可以常量优化,变量不可以。
3.比int大的类型没有常量优化机制
写一个小数常量的时候,小数常量也是有数据类型的, double类型。
System.out.println(31.4); // 31.4 是常量 同时也是 double数据类型的。
double d = 31.4;
//float f = 31.4 ; // 编译报错。 比int大的类型 没有常量优化机制。 所以double类型不能直接赋值给 float类型。
loat f = (float)31.4;
float fl = 31.4F; // 你31.4 默认是double类型, 能不能我们写一个小数的时候 让他默认是 float类型呢, 当然可以了, 你只要在小数后面加一个F 那么这个小数 就会被当做float类型啦。
4: long类型的数据后面 为什么要加L

class Demo {
public static void main(String[] args){
int a = 100;
long lo = a; // 正确 隐式类型转换
long lon = 100; // 正确。 既然是正确的 那么为什么老师一直说 让我在long类型的数据后面 加一个L呢 实在不懂。
System.out.println(100); // 10
//System.out.println(10000000000); //100亿 int类型 (int类型的数据 最大到21亿左右)
// 此时 报错了, 100亿已经超过了int数据类型
// 但是 直接写一个 整数常量 确实就是int类型的啊, 所以肯定报错。
// 所以 我们就想 我们能不能写一个整数的时候 让jvm把他当做是一个long类型的数据呢, 而不是int呢, 可以啊 你只需要在数据后面加一个 L就可以了。
System.out.println(10000000000L);
long lo = 100;
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值