【Java学习笔记】数据类型转换

数据类型转换(重要!!!

类型一:自动类型转换

  • 定义:精度小的类型自动转换精度大的数据类型

  • 两条规定的转换链关系(必须记住!!!

    • 第一条

    • char --> int --> long --> float --> double

    • 第二条

    • byte --> short --> int --> long --> float --> double

  • 注意char btye short 之间并没有转换关系


  • 具体规则介绍(非常重要!!!

    • (1)多种数据类型混合运算时,系统首先自动将所有数据转成容量最大的那种数据类型,然后进行计算

    • (2)当我们把精度大的数据类型赋值精度小的数据类型时就会报错,反之就会自动类型转换

    • (3)(byte short)和 char 之间不会相互自动转换

    • (4)byte , short , char 他们三者可以计算,在计算时首先转换成 int 类型

      • >>>解释:只要是混合运算,无论出现了相同类型还是不同类型,只要出现了三个类型,计算的结果就是int 类型

      • 如何理解?具体参考下方的代码示例

    • (5)boolean 不参与转换

    • (6)自动提升原则表达式结果的类型自动提升为操作数中最大的类型

具体代码示例解释

//自动类型转换细节
public class AutoConvertDetail {

	//编写一个main方法
	public static void main(String[] args) {
		//细节1: 有多种类型的数据混合运算时,
		//系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
		int n1 = 10; //ok
		//float d1 = n1 + 1.1;//错误 n1 + 1.1 => 结果类型是 double
		//double d1 = n1 + 1.1;//对 n1 + 1.1 => 结果类型是 double
		float d1 = n1 + 1.1F;//对 n1 + 1.1 => 结果类型是 float

		//细节2: 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据类型时,
		//就会报错,反之就会进行自动类型转换。
		//
		//int n2 = 1.1;//错误 double -> int

		//细节3: (byte, short) 和 char之间不会相互自动转换
		//当把具体数赋给 byte 时,(1)先判断该数是否在byte范围内,如果是就可以
		byte b1 = 10; //对  , -128-127
		// int n2 = 1; //n2 是int
		// byte b2 = n2; //错误,原因: 如果是变量赋值,判断类型
		//
		// char c1 = b1; //错误, 原因 byte 不能自动转成 char
		//
		//

		//细节4: byte,short,char  他们三者可以计算,在计算时首先转换为int类型

		byte b2 = 1;
		byte b3 = 2;
		short s1 = 1;
		//short s2 = b2 + s1;//错, b2 + s1 => int
		int s2 = b2 + s1;//对, b2 + s1 => int

		//byte b4 = b2 + b3; //错误: b2 + b3 => int
		//

		//boolean 不参与转换
		boolean pass = true;
		//int num100 = pass;// boolean 不参与类型的自动转换

		//自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
		//看一道题

		byte b4 = 1;
		short s3 = 100;
		int num200 = 1;
		float num300 = 1.1F;

		double num500 = b4 + s3 + num200 + num300; //float -> double
	}
}

类型二:强制类型转换

  • 1. 定义:精度大的数据类型转换精度小的数据类型

  • 2. 造成的问题

    • (1)精度缺失

    • (2)内存溢出

  • 3. 使用方法

    • (1)在变量值前面用小括号加数据类型,例如:float a = (float)1.1,注意在 Java 中小数默认double类型,把一下精度大的赋值给精度小的必然报错

    • (2)强制转换只对离强制转换最近的操作数有效

    • (3)可用括号改变优先级,例如对表达式的结果进行强制类型转换,double a = (float)(2.5*3+9)float 赋值给 duuble 属于是低精度赋值给高精度—>合法

  • 4. 注意点

    • 1.char类型可以保存int常量值,但布恩那个保存int变量值,需要强转(错误案例int m = 100 , char c = m ,因为 int 赋值给 char 属于是高精度赋值给低精度必然报错

    • 2. byteshort, char类型在运算时,当作 int 类型处理


类型三:字符窜类型转换

一、所有数据类型转字符串

System.out.println((数据)+ "")

如何理解?其实就是和空字符进行了拼接,而+本身就表示字符串的拼接,结果必然是字符串

二、字符串转不同类型数据

注意:用到了类和方法,不好理解,直接上代码理解+记忆


public class StringToBasic {

	//编写一个main方法
	public static void main(String[] args) {

		//基本数据类型->String

		int n1 = 100;
		float f1 = 1.1F;
		double d1 = 4.5;
		boolean b1 = true;
		String s1 = n1 + "";
		String s2 = f1 + "";
		String s3 = d1 + "";
		String s4 = b1 + "";
		System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);

		//String->对应的基本数据类型
		String s5 = "123";
		//会在OOP 讲对象和方法的时候回详细
		//解读 使用 基本数据类型对应的包装类的相应方法,得到基本数据类型
		int num1 = Integer.parseInt(s5);
		double num2 = Double.parseDouble(s5);
		float num3 = Float.parseFloat(s5);
		long num4 = Long.parseLong(s5);
		byte num5 = Byte.parseByte(s5);
		boolean b = Boolean.parseBoolean("true");
		short num6 = Short.parseShort(s5);


		System.out.println(num1);//123
		System.out.println(num2);//123.0
		System.out.println(num3);//123.0
		System.out.println(num4);//123
		System.out.println(num5);//123
		System.out.println(num6);//123
		System.out.println(b);//true

		//怎么把字符串转成字符char -> 含义是指 把字符串的第一个字符得到
		//解读  s5.charAt(0) 得到 s5字符串的第一个字符 '1'
		System.out.println(s5.charAt(0));

	}
}

运行结果

100 1.1 4.5 true
123
123.0
123.0
123
123
123
true
1

注意点

  • 1. 在charint类型的时候

    • (1)如果char类型是数字字符转换成功

    • (2)如果char类型是字符程序异常(Excerption)

  • 2. 字符字符串取第一个字符进行转换


小练习巩固

判断是否能够通过编译

  • 第一组

    • short s = 12; //ok

    • s = s - 9; // 错误 int -> short

    • byte b = 10; // ok

    • b = b + 11; // 错误 int -> byte

    • b = (byte)(b + 11); // 正确,使用强转

  • 第二组

    • char c = 'a'; //ok

    • int i = 16; //ok

    • float d = .314F; //ok

    • double result = c + i + d; //ok float -> double

  • 第三组

    • byte b = 16; //ok

    • short s = 14; //ok

    • short t = s + b; // 错误 int -> short

你可能感兴趣的:(Java学习笔记,java,学习,笔记)