一网打尽各类Java基本数据类型转换
一 自动类型转换
1 自动类型转换图
数范围小的向数范围大的进行自动类型转换,如同把小瓶的水倒入大瓶,不会有任何问题。Java支持自动类型转换。
2 代码示例
public class AutoConversion { public static void main(String[] args) { int a = 6; // int可以自动转换为float类型 float f = a; // 下面将输出6.0 System.out.println(f); // 定义一个byte类型的整数变量 byte b = 9; // 下面代码将出错,byte型不能自动类型转换为char型 // char c = b; // 下面是byte型变量可以自动类型转换为double型 double d = b; // 下面将输出9.0 System.out.println(d); } }
3 运行结果
6.0
9.0
4基本类型的值和字符串连接代码示例
public class PrimitiveAndString { public static void main(String[] args) { // 下面代码是错的,因为5是一个整数,不能直接赋给一个字符串 // String str1 = 5; // 一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串 String str2 = 3.5f + ""; // 下面输出3.5 System.out.println(str2); // 下面语句输出7Hello! System.out.println(3 + 4 + "Hello!"); // 下面语句输出Hello!34,因为Hello! + 3会把3当成字符串处理, // 而后再把4当成字符串处理 System.out.println("Hello!" + 3 + 4); } }
5 运行结果
3.5
7Hello!
Hello!34
二强制类型转换
1概念介绍
希望把上图的右边类型转化为左边类型,则必须进行强制的类型转换,强制类型转换格式是(targettype)value,类似把大瓶的水倒入小瓶,如果大瓶的水很多,将会引起溢出,从而造成数据丢失。这种转换也称为缩小转换。
2 代码示例
public class NarrowConversion { public static void main(String[] args) { int iValue = 233; // 强制把一个int类型的值转换为byte类型的值 byte bValue = (byte)iValue; // 将输出-23 System.out.println(bValue); double dValue = 3.98; // 强制把一个double类型的值转换为int int tol = (int)dValue; // 将输出3 System.out.println(tol); } }
3 运行结果
-23
3
4 模拟随机字符串示例
public class RandomStr { public static void main(String[] args) { // 定义一个空字符串 String result = ""; // 进行6次循环 for(int i = 0 ; i < 6 ; i ++) { // 生成一个97~122的int型的整数 int intVal = (int)(Math.random() * 26 + 97); // 将intValue强制转换为char后连接到result后面 result = result + (char)intVal; } // 输出随机字符串 System.out.println(result); } }
5运行结果
rxyelm
三 表达式自动提升
1 自动提升概念
当一个算术表达式包含多个基本类型的值时,整个算术表达式的数据类型将会自动提升,提升规则如下
所有byte类型,short类型和char类型将被提升到int类型
整个算术表达式类型自动提升到与表达式中最高等级操作数同样类型
2 代码示例
public class AutoPromote { public static void main(String[] args) { // 定义一个short类型变量 short sValue = 5; // 下面代码将出错:表达式中的sValue将自动提升到int类型, // 则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。 // sValue = sValue - 2; byte b = 40; char c = 'a'; int i = 23; double d = .314; // 右边表达式中在最高等级操作数为d(double型) // 则右边表达式的类型为double型,故赋给一个double型变量 double result = b + c + i * d; // 将输出144.222 System.out.println(result); int val = 3; // 右边表达式中2个操作数都是int,故右边表达式的类型为int // 因此,虽然23/3不能除尽,依然得到一个int整数 int intResult = 23 / val; System.out.println(intResult); // 将输出7 // 输出字符串Hello!a7 System.out.println("Hello!" + 'a' + 7); // 输出字符串104Hello! System.out.println('a' + 7 + "Hello!"); } }
3 运行结果
144.222
7
Hello!a7
104Hello!