类型转换烦恼:Java中多种类型转换问题示例
在Java中,类型转换可能因为各种原因变得复杂。以下是一些常见的类型转换问题示例:
基本类型到引用类型:
自动装箱/拆箱:
// 基本类型装箱成对象
int num = 10;
Object obj = num; // 这是非法操作,编译器会报错
// 对象拆箱回基本类型
if (obj instanceof Integer) {
Integer i = (Integer) obj;
System.out.println(i); // 输出: 10
}
强制转换:
int num = 10;
String str = num + ""; // 这是非法操作,编译器会报错
// 必须明确类型,否则会抛出 ClassCastException
if (str instanceof String) {
Integer i = Integer.parseInt(str);
System.out.println(i); // 输出: 10
} else {
throw new ClassCastException("Invalid type for string conversion", str.getClass());
}
引用类型到基本类型:
自动拆箱/装箱:
Integer num = 10;
System.out.println(num); // 输出: 10
String str = "Hello, Java!";
int length = str.length(); // 使用 .length() 方法获取长度
System.out.println(length); // 输出: 13
强制拆箱/装箱:
// 强制将Integer对象转换为int类型
int num = (int) Integer.valueOf(10);
System.out.println(num); // 输出: 10
// 强制将String字符串转换为char类型
char strChar = (char) 'Hello, Java!';
System.out.println(strChar); // 输出: H
自定义类的类型转换:
继承自动转型:
class Animal {
void speak() {
System.out.println("Animal speaks"); // 默认实现
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("Dog barks"); // 自定义实现
}
}
Dog dog = new Dog();
dog.speak(); // 输出: Dog barks
手动类型转换:
class Animal {
String speak() {
return "Animal speaks"; // 默认实现
}
}
class Dog extends Animal {
@Override
public String speak() {
return "Dog barks"; // 自定义实现
}
}
Dog dog = new Dog();
String speech = dog.speak(); // 强制转换为String类型
System.out.println(speech); // 输出: Dog barks
注意:在实际编程中,推荐使用自动装箱/拆箱和方法重写的方式进行类型转换。
还没有评论,来说两句吧...