我们经常会遇到使用类型转换的情况,这里做一个小的总结,加强记忆,也方便自己查看。
在Java中,存在以下几种类型转换情况:
-
自动类型转换(隐式类型转换):当目标类型的范围大于源类型时,会自动进行类型转换。例如,将一个整数赋值给一个更大范围的整数类型,或者将一个字符赋值给一个整数类型。
-
强制类型转换(显式类型转换):当目标类型的范围小于源类型时,需要使用强制类型转换进行转换。强制类型转换需要在目标类型前加上括号并使用转换运算符。但是要注意,如果进行强制类型转换可能导致精度损失或溢出问题,需要谨慎使用。
-
数字类型之间的转换:可以将一种数字类型转换为另一种数字类型。例如,将整数类型转换为浮点类型,或将浮点类型转换为整数类型。
-
对象类型之间的转换:可以将一个类的对象转换为另一个类的对象,这涉及到继承和多态的概念。父类引用指向子类对象时,可以进行向上转型;而子类引用指向父类对象时,可以进行向下转型。
-
字符串与基本数据类型之间的转换:可以将字符串类型转换为基本数据类型,或将基本数据类型转换为字符串类型。例如,使用parseInt()方法将字符串转换为整数,使用valueOf()方法将整数转换为字符串。
需要注意的是,类型转换可能会引发数据丢失、精度损失或溢出等问题,因此在进行类型转换时应当慎重,并且确保转换的安全性和正确性。
一、String转基本类型
可以使用包装类或者相关的方法将String类型转换为基本类型。
下面是一些常用的类型转换示例:
-
转换为int类型:
String str = "123"; int num = Integer.parseInt(str);
-
转换为double类型:
String str = "3.14"; double num = Double.parseDouble(str);
-
转换为float类型:
String str = "2.718"; float num = Float.parseFloat(str);
-
转换为long类型:
String str = "9876543210"; long num = Long.parseLong(str);
-
转换为boolean类型:
String str = "true"; boolean flag = Boolean.parseBoolean(str);
需要注意的是,如果String的格式无法正确转换为相应的基本类型,会抛出NumberFormatException异常。因此,在进行类型转换之前最好进行输入验证以避免异常的发生。
总结:要转成什么类型,就使用目标类型的包装类的parse方法。
二、基本类型转String
这个比较简单,就是使用String的valueOf方法。
下面是一些常用的类型转换示例:
-
int类型转换为String类型:
int num = 123; String str = String.valueOf(num); // 或者使用 Integer 类的 toString() 方法 // String str = Integer.toString(num);
-
double类型转换为String类型:
double num = 3.14; String str = String.valueOf(num); // 或者使用 Double 类的 toString() 方法 // String str = Double.toString(num);
其他的类型以此类推。
还可以使用字符串拼接的方式将基本类型转换为String类型,例如:
int num = 123;
String str = "" + num;
需要注意的是,Java中的字符串拼接操作会自动调用基本类型的toString()方法来将其转换为String类型。
三、Data类型跟String互转
可以使用SimpleDateFormat
类来实现Date
和String
类型的相互转换。
以下是示例代码:
-
将
Date
类型转换为String
类型:import java.text.SimpleDateFormat; import java.util.Date; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(date);
-
将
String
类型转换为Date
类型:import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; String str = "2023-10-15 13:38:40"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); }
四、int、double、float互转
这里涉及到两个概念:
数据类型转换分为两种:隐式类型转换和显式类型转换
-
隐式类型转换是指将小范围的数据类型自动转换为大范围的数据类型,即类型提升。例如:
int num1 = 123; double num2 = num1; // num1会被自动转换为double类型
-
显式类型转换是指使用强制类型转换操作符将大范围的数据类型转换为小范围的数据类型。例如:
double num1 = 123.456; int num2 = (int)num1; // num1会被强制转换为int类型
以下是示例代码:
-
int
类型转换为double
类型:int num1 = 123; double num2 = (double)num1; // 或者使用包装类提供的方法 // double num2 = Double.valueOf(num1);
-
int
类型转换为float
类型:int num1 = 123; float num2 = (float)num1; // 或者使用包装类提供的方法 // float num2 = Float.valueOf(num1);
-
double
类型转换为int
类型:double num1 = 123.456; int num2 = (int)num1; // 或者使用包装类提供的方法 // int num2 = Double.valueOf(num1).intValue();
-
double
类型转换为float
类型:double num1 = 123.456; float num2 = (float)num1; // 或者使用包装类提供的方法 // float num2 = Double.valueOf(num1).floatValue();
-
float
类型转换为int
类型:float num1 = 123.456f; int num2 = (int)num1; // 或者使用包装类提供的方法 // int num2 = Float.valueOf(num1).intValue();
-
float
类型转换为double
类型:float num1 = 123.456f; double num2 = (double)num1; // 或者使用包装类提供的方法 // double num2 = Float.valueOf(num1).doubleValue();
需要注意的是,在进行数据类型转换时可能会出现精度损失或者溢出的问题,因此在实际应用中应该根据场景合理选择使用相应的数据类型。