JAVA类型转换

JAVA中,类型转换是将一种数据类型转换为另一种数据类型。根据转换的方式可以为分为隐式转换和显式转换。

一、隐式转换

不需要显示声明,JAVA会自动将一种数据类型转换为另一种数据类型。这种转换的前提是数据类型“由小转大”——数据容量小的转换为数据容量大的。就好比一个人住在10平的房间,现在需要他住在100平的房间,这个人(数据)是不会发生变化的,人的大小(数据精度)不会发生丢失。

常见的隐式转换:

public static void main(String[] args) {
		//1、byte-->int
		byte byteNum = 10;
		int intNum = byteNum;
		System.out.println("byte-->int: byteNum=" + byteNum + ",intNum=" + intNum);
		
		//2、byte-->short
		short shortNum = byteNum;
		System.out.println("byte-->short: byteNum=" + byteNum + ",shortNum=" + shortNum);
		
		//3、short-->int
		int intNum2 = shortNum;
		System.out.println("short-->int: shortNum=" + shortNum + ",intNum2=" + intNum2);
		
		//4、int-->long
		long longNum = intNum2;
		System.out.println("longNum = intNum2: intNum2=" + intNum2 + ",longNum=" + longNum);
		
		//5、int-->float
		float floatNum = intNum2;
		System.out.println("floatNum = intNum2: intNum2=" + intNum2 + ",floatNum=" + floatNum);
		
		//6、float-->double
		float floatNum2 = 3.14f;
		double doubleNum = floatNum2;
		System.out.println("float-->double: floatNum2=" + floatNum2 + ",doubleNum=" + doubleNum);
		
		//7、char-->int
		char charNum = 'A';
		int charIntNum = charNum;
		System.out.println("char-->int: charNum=" + charNum + ",charIntNum=" + charIntNum);
	}

输出如下:

byte-->int: byteNum=10,intNum=10
byte-->short: byteNum=10,shortNum=10
short-->int: shortNum=10,intNum2=10
longNum = intNum2: intNum2=10,longNum=10
floatNum = intNum2: intNum2=10,floatNum=10.0
float-->double: floatNum2=3.14,doubleNum=3.140000104904175
char-->int: charNum=A,charIntNum=65

在编写的时候就可以发现,当类型转换发生在小精度转大精度的时候,直接转换就行,编译器也不会有提示。

二、显式转换

需要显式声明。这种转换发生在大精度转小精度的时候,因为存在丢失精度的风险,所以编译器会提示你——你需要明白你的操作可能会丢失精度,如果你了解其中的风险,那么需要你显式声明这种转换。

显示转换可以分为两类,一类发生在数值之间的转换,另一类是引用数据类型之间的转换。

(1)、数值显式转换:

public static void forceChange() {
		//long-->int
		long longNum = 100;
		int intNum = (int)longNum;
		System.out.println("long-->int,long value = " + longNum + ", int value = " + intNum);
		
		//double-->float
		double doubleNum = 3.1415926;
		float floatNum = (float) doubleNum;
		System.out.println("double-->float,double value = " + doubleNum + ", float valie = " + floatNum);
		
		//double-->int
		int intNum2 = (int)doubleNum;
		System.out.println("double-->int,double value = " + doubleNum + ", int value = " + intNum2);
	}

输出:

long-->int,long value = 100, int value = 100
double-->float,double value = 3.1415926, float valie = 3.1415925
double-->int,double value = 3.1415926, int value = 3

要注意对于高精度的数值强制转换为低精度的数值,会发生丢失精度的情况,如:

double-->int,double value = 3.1415926, int value = 3

(2)、引用类型转换

显式转换通常在父类和子类,接口和实现类之间:

public class ObjChange extends Father{
	public static void main(String[] args) {
		Father father = new ObjChange();
		System.out.println(father.getAge());
	}
}

class Father {
	int age = 3;
	public int getAge() {
		return age;
	}
}

接口和实现类之间的转换,和集合类的使用是一样的:

		//InterfarceObj inter = new ImplementsObj()
		List<String> list = new ArrayList<>();
		Map<String, String> map = new HashMap<>();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值