Java 提高(2)----- 类型转换
程序员文章站
2024-03-07 22:16:15
...
类型转换
基本类型的类型转换
当我们传入的参数和要求的参数不一样时,如果从满足自动类型转换时会自动类型转换
自动类型转换
一个表数范围小的可以向表数范围大的进行自动类型转换,如上图,可以从左边自动向右边转换
public class AutoTraverse {
private void f1(byte b){
System.out.println("byte "+b);
}
private void f1(short b){
System.out.println("short "+b);
}
private void f1(char b){
System.out.println("char "+b);
}
private void f1(int b){
System.out.println("int "+b);
}
private void f1(long b){
System.out.println("long "+b);
}
private void f1(float b){
System.out.println("float "+b);
}
private void f1(double b){
System.out.println("double "+b);
}
public static void main(String[] args) {
AutoTraverse me = new AutoTraverse();
byte a = 5;
//逐个注释上面的重载载方法可以看看自动转换的类型
me.f1(a);
}
}
强制类型转换
但是如果从大范围数转换成小范围数必须使用强制类型转换(type)符号
public static void main(String[] args) {
long b = 10;
// int c = b; //error
int c = (int) b; //正确
}
表达式类型的自动提升
当一个表达式中包含多个基本类型的值时,整个表达式的数据类型会发生自动提升,有如下规则
- 所以的byte,short,char转换成int类型
- 整个算法表达式的数据类型自动提升到与表达式中最高操作数相同的登记,操作数的登记就是自动类型转换的图
- 如果遇到了String,从String开始字节加到string后面
public static void main(String[] args) {
int a = 10;
// float b = a * 2.0; //error ,因为2.0没有加f是double类型的,最后赋给float类型的b没有强制类型转换
double b = a * 2.0;
float c = a * 2.0f; //算数表达式的最高类型是float,所以正确
}
public static void main(String[] args) {
System.out.println(3+4+"hello"); //输出7hello
System.out.println("hello"+3+4); //输出hello34
}