原文:https://blog.csdn.net/tuckEnough/article/details/80020640
类型转换
1、boolean不能转换成其他类型的数据类型
2、默认转换
1.byte,short,char——int——long——float——double
2.byte,short,char相互之间不转换,参与运算首先转换成int类型
3、强制转换:
目标类型 变量名 = (目标类型)(被转换的数据)
损失精度实例
double和float类型
//double和float类型
public void test1(){
double d = 12.345;
/**
* 将double的值赋值给float,需要加强制类型转换
*/
//float f = d;//编译不能通过
/**
* 两种方式都可以定义float类型,但是第一种是一个double经过强制转换的
* 第二种是直接为float类型的数据
*/
float f1 = (float) 12.345;
float f2 = 12.345F;
}
byte类型
// byte类型
public void test2(){
byte b1 = 3, b2 = 4, b;
/**
* 对于变量而言,先提升它的类型为int,再做计算,这是将两个整形类型转换为
* type类型,会发生进度损失错误
*/
//b = b1+b2;//不能通过编译
b = 3 + 4;//常量,先计算结果,然后查看是否在byte的范围内,如果在就不报错
}
public void test3(){
/**
* byte b = 130;
* 是否有问题?若有,怎么改正?结果是多少?
*/
/**
* byte的取值范围:-128~127,130超出范围,报错
*/
//byte b = 130;//不能通过编译
//使用强制类型转换
byte b = (byte) 130;//输出结果为-126
/**
* 结果分析如下:
* 计算机中数据的运算都是通过补码进行计算的
* ①:获取130这个数据的二进制码
* 00000000 00000000 00000000 10000010
* 这是130的原码,也是反码,还是补码
* ②:int类型为4个字节,byte为1个字节,做截取操作
* 10000010
* 这个结果为补码
* ③:已知补码求原码:
* 符号位 数值位
* 补码 1 0000010
* 反码 1 0000001
* 原码 1 1111110
*/
System.out.println(b);//-126
}
char 和int
public void test4(){
/**
* 了解ASCII表
* 'a' 97
* 'A' 65
* '0' 48
*/
System.out.println('a');//a
System.out.println('a'+1);//97
}
String
public void test5() {
/**
* 字符串和其他数据做'+'运算,结果是字符串类型
* 此时'+'不为加法运算,为字符串连接符
*/
System.out.println("hello" + 'a' + 1);//helloa1
System.out.println('a' + 1 + "hello");//98hello
System.out.println("5+5=" + 5 + 5);//5+5=55
System.out.println(5 + 5 + "=5+5");//10=5+5
}