数据类型:基本数据类型及引用数据类型

基本数据类型:byte、short、int、long、float、double、char及布尔类型(boolean)

在Java语言中除布尔(boolean)类型外,其它数据类型均可进行相互转换

分类

自动类型转换、强制类型转换

自动类型转换

变量在做计算时,可能会出现溢出的情况,Java采用自动类型转换的方式处理:==占用内存小空间的数据类型向大空间的数据类型自动转换==

整数类型的自动转换

规律:byte、short、char在做计算时,会自动提升数据类型为int

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
byte a = 1;
//错误: 不兼容的类型: 从int转换到byte可能会有损失
//a定义为变量,编译检测:假设a取byte数据类型中的最大值时,与1做加运算将超出byte数据类型的取值范围,造成精度损失
//byte b = a + 1;
int b = a + 1;
System.out.println("b = " + b);

short c = 1;
//short d = c + 2;
//short在运算时自动提升数据类型为int
int d = c + 2;
System.out.println("d = " + d);

char e = 'a';
//char类型数据在参与运算时,每一个char类型的数据都对应一个数值类型的ASCII码,参与计算的是字符对应的ASCII码
int f = e + 1;
System.out.println("f = " + f);

//short、byte与char任意类型组合运算,自动提升为int
int g = a + c;
System.out.println("g = " + g);
}
}

int在与其他数据类型的数据计算达到溢出时,直接返回溢出后的数据值

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
int intTypeMaxValue = 2147483647;
/*
计算过程:
1、计算机能直接识别的代码为二进制代码
2、2147483647 转换为二进制码:int数据类型占内存大小4个字节,1个字节占8个位,首位为符号位
0111 1111 1111 1111 1111 1111 1111 1111
3、1 转换为二进制码
1
4、两者相加结果(二进制)
1000 0000 0000 0000 0000 0000 0000 0000
5、两者相加结果(十进制)
-2147483648
*/
long resultValue = intTypeMaxValue + 1;
//输出 resultValue = -2147483648
System.out.println("resultValue = " + resultValue);
}
}

任何整数类型与long类型做运算,都自动转换为long类型

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
byte number1 = 1;
long number2 = 2;
//错误: 不兼容的类型: 从long转换到byte可能会有损失,也就是说 number1 + number2 的结果为long数据类型
//byte result = number1 + number2;
long result = number1 + number2;
System.out.println(result);
}
}

常量在做运算时,只要不超出定义的数据类型的范围就不会出错,也不会发生类型的自动提升

小数类型的自动转换

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
float a = 1.2f;
//float类型与常量计算,不会出现类型自动提升
float b = a + 1;
System.out.println(b);

//float与float计算,不会出现类型自动提升
float c = a + b;
System.out.println(c);

byte byteValue = 1;
short shortValue = 1;
int intValue = 1;
long longValue = 1;
//float类型和所有整数类型计算都会转换成float
float d = a + shortValue;
System.out.println(d);

//double类型同理

//double 与 float 计算,类型自动转换成 double
}
}

==总结:不同数据类型参与计算后,结果自动向大的一个数据类型转换==

强制类型转换

占用内存大空间数据类型 向 小空间数据类型 转换

语法:(目标数据类型) 转换的变量;

整数类型的强制转换

==强制类型转换可能存在损失精度的情况:转换的数值超出目标转换类型==

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
int number = 100;
//short result = number;
//将int强制类型转换为short
short result = (short) number;
System.out.println(result);

//将int强制类型转换为 byte
byte result1 = (byte) number;
System.out.println(result1);

long number1 = 12;
byte result2 = (byte) number1;
System.out.println(result2);
}
}

小数类型的强制转换

package blog.csdn.net.karen.javasedemo;

/**
* 变量演示,数据类型转换
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {

public static void main(String[] args) {
float a = 1.1f;
//小数转换为整数类型(long、int、short及byte)后会舍弃小数位
int result1 = (int) a;
System.out.println(result1);

double b = 2.1;
float result2 = (float) b;
System.out.println(result2);

//char类型可转换为byte、short、int、long、float及double
char c = 'a';
byte result3 = (byte) c;
System.out.println(result3);

//整数类型转换为char字符类型
char result4 = (char) 97;
System.out.println(result4);
}
}