1、小的类型自动转化为大的类型
2、整数类型可以自动转化为浮点类型,可能会产生舍入误差
3、字符可以自动提升为整数
示例代码:
隐式类型转换
int i = 128;
double b = i;//128.0
整数类型可以自动转化为浮点类型,可能会产生舍入误差
float floatValue1=2+10f;
float floatValue2=floatValue1-11.9f;
System.out.println(floatValue2);//0.10000038
字符可以自动提升为整数
char Value1 ='a';
int Value2=Value1+10;
System.out.println(Value2);//107
强制转换格式:(类型)变量名
(强制转换需要程序员手动处理)
注意点:
1、强制类型转换可能导致溢出或损失精度
2、在把容量大的类型转换为容量小的类型时必须使用强制类型转换
3、浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
4、不能对布尔值进行转换
5、不能把对象类型转换为不相干的类型
示例代码:导致溢出(1)
容量大类型转容量小类型
int i = 128;
byte b = (byte)i;//-128 内存溢出
// 00000000 00000000 00000000 10000000 128的原码
// 00000000 00000000 00000000 10000000 128的反码
// 00000000 00000000 00000000 10000000 128的补码
// 10000000 的补码
// 11111111 反码
// 10000000
/**
* 关于 原码,反码,补码的知识(了解)
* 正数的反码,补码是其本身;
* 负数的反码是符号位保持不变,其余位取反;负数的补码是在其反码的基础上+1
*/
1、为什么会是负的呢?
2、byte 最大值是 127,这里给了它128,所以它超出了最大值,数据类型超过了计算机字长的界限而出现的数据溢出
示例代码:导致溢出(2)
package com.gr.demo;
public class demo4 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int tota1 = money*years;//-1474836480 计算的时候溢出了
System.out.println(tota1);//-1474836480
long tota2 = money*years;//默认是int,转换之前已经存在问题了?
long tota13 = money*((long)years);//先把一个数转换为Long 在计算之前就把精度解决掉了
System.out.println(tota13);//20000000000
}
}
示例代码:损失精度
System.out.println((int)23.7);//23 舍弃小数
System.out.println((int)-45.89f);//-45 舍弃小数
示例代码:字符强制转换成数字
char c1 = 'a';
char c2 = '中';
System.out.println(c1);//a
System.out.println((int)c1);//97 强制转换
System.out.println(c2);//中
System.out.println((int)c2);//20013 强制转换
本文地址:https://blog.csdn.net/weixin_44540414/article/details/107166296
如对本文有疑问, 点击进行留言回复!!
【java基础】面试常见问题:类和对象,封装继承多态,final关键字,static关键字,类加载过程,双亲委派模型
荐 Java语言基础之JDK1.8新特性(Lambda表达式、函数式接口、Stream流、新的日期API)
网友评论