Java 类型转换

Java 类型转换概述

Java 类型转换分为两种:自动类型转换(隐式转换)和强制类型转换(显式转换)。自动类型转换由编译器自动完成,通常发生在小范围数据类型向大范围数据类型转换时;强制类型转换需要手动指定,可能伴随精度损失或数据溢出。


自动类型转换(隐式转换)

自动类型转换遵循从小到大的规则,例如 byteshortintlongfloatdouble

int numInt = 100;
long numLong = numInt;  // 自动转换
System.out.println(numLong);  // 输出:100

float numFloat = 3.14f;
double numDouble = numFloat;  // 自动转换
System.out.println(numDouble);  // 输出:3.140000104904175


强制类型转换(显式转换)

强制类型转换需在目标类型前加括号,可能丢失精度或导致溢出。

double numDouble = 3.14;
int numInt = (int) numDouble;  // 强制转换,丢失小数部分
System.out.println(numInt);  // 输出:3

long numLong = 2147483648L;
int numInt = (int) numLong;  // 强制转换,溢出
System.out.println(numInt);  // 输出:-2147483648


常见类型转换场景

整数与浮点数转换
int a = 10;
float b = (float) a;  // 强制转换(实际可省略)
System.out.println(b);  // 输出:10.0

字符与整数转换
char ch = 'A';
int ascii = ch;  // 自动转换
System.out.println(ascii);  // 输出:65

int num = 97;
char ch = (char) num;  // 强制转换
System.out.println(ch);  // 输出:'a'

字符串与其他类型转换
String str = "123";
int num = Integer.parseInt(str);  // 字符串转整数
System.out.println(num + 1);  // 输出:124

double num = 3.14;
String str = String.valueOf(num);  // 数字转字符串
System.out.println(str + "0");  // 输出:3.140


类型转换注意事项

精度损失问题

float f = 1.23456789f;
double d = (double) f;
System.out.println(d);  // 输出:1.2345678806304932(精度损失)

数值溢出问题

byte b = (byte) 300;  // 超出byte范围(-128~127)
System.out.println(b);  // 输出:44(300-256)

对象类型转换 需通过 instanceof 检查以避免 ClassCastException

Object obj = "Hello";
if (obj instanceof String) {
    String s = (String) obj;  // 安全转换
    System.out.println(s.toUpperCase());  // 输出:HELLO
}


通过合理使用类型转换,可以灵活处理不同数据类型间的操作,但需注意潜在风险。

你可能感兴趣的:(java,python,算法)