Conversión de tipos de datos básicos de Java
La conversión de tipos de datos en Java se puede dividir en dos tipos: conversión automática y conversión forzada.
1. Conversión automática de tipos (implícita):
Características: El código no requiere un procesamiento especial y se completa automáticamente.
Regla: El rango de datos va de grande a pequeño (Char → Byte → corto → int → largo— ›float → double).
Se ha producido la siguiente conversión automática de tipos:
public class Demo01 {
public static void main(String[] args) {
/**
* 只要右边的变量类型的范围比左边的变量范围小都可以发生自动类型转换
* */
byte num1 = 10;
System.out.println(num1); //输出结果:10
short num2 = num1;
System.out.println(num2); //输出结果:10
int num3 = num2;
System.out.println(num3); //输出结果:10
long num4 = num3;
System.out.println(num4); //输出结果:10
float num5 = num4;
System.out.println(num5); //输出结果:10.0
double num6 = num5;
System.out.println(num6); //输出结果:10.0
}
}
2. Conversión de tipo forzada (implícita):
Características: El código necesita un procesamiento especial y no se completa automáticamente.
Formato: [Tipo con rango de datos pequeño] [Nombre de variable] = (Tipo con rango de datos pequeño) [Tipo con rango de datos grande que necesita convertir].
Por ejemplo, el siguiente ejemplo:
public class Demo01 {
public static void main(String[] args) {
/**
* 左边是int类型,需要将long类型赋值给int类型
* long类型的数据范围比int类型大
* 不能发生自动类型转换,需要特殊处理
* 格式:[数据范围小的类型] [变量名] = (数据范围小的类型)[你需要转换的数据范围大的类型]
*/
//int num1 = 100L; //如果不进行特殊处理,这段代码直接编译器爆红,需要强转,如下:
int num1 = (int)100L; //对long类型进行了强制转换int类型,括号里面的就是你需要转换的类型
System.out.println(num1); //输出结果:100
//如果你要把浮点型的数据强制转换,可能会发生精度丢失,如下:
int num2 = (int)36.18;
System.out.println(num1); //结果为:36
//这里需要注意的是精度丢失不是四舍五入,而是直接丢弃小数点后面的数
long num3 = (long)39.9F;
System.out.println(num3); //结果为:39,而不是40
short num4 = (short)39.9;
System.out.println(num4); //结果还是39
// ......
}
}
Después de leer la conversión de tipo de datos, una persona cuidadosa puede encontrar: En el ejemplo de conversión de tipo implícito anterior, el número 10 no debe ser de tipo int. ¿Por qué se puede dar directamente a byte y short, de acuerdo con las reglas de conversión de tipo implícita? : El rango de datos debe ser de grande a pequeño para poder convertirse implícitamente. ¿Por qué int es más grande que un byte y es corto, pero no requiere una conversión de tipo forzada?
public class Demo01 {
public static void main(String[] args) {
//直接写数字默认是int,为什么给byte、short不需要强转?
byte num1 = 127;
short num2 = 32767;
/**
*这是因为:Java中规定所有整数默认是int型。
*但是只要在byte,short它们的取值范围内赋值都是可以的
*比如byte=127 就是可以的给byte=128 就不行了 因为就超出byte 127 的最大范围了。
*/
byte num3 = 128; //超过byte范围编译器直接报错
short num4 = 32768; //超过short范围编译器直接报错
}
}