java int和float默认类型转换探究

最近做一个图片的小程序,发现经常有错误,后来发现是int转float类型时出错。不过通过本次错误更好的理解了类型转换的原理:根据直系父母来定的。

a/b,结果类型是根据直系父母a和b来确定的。a,b都是int,结果也是int,否则根据类型转换表来转换。在处理复杂表达式的时候,可能出现临时值,这个时候临时值的类型就需要小心啦。

下面是实验代码

package test;

public class int_float {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * java默认类型转换测试
		 */
		int wid = 6;
		int height = 3;
		float jj = wid * 3 / (height * 4);
		
		int wid2 = 6;
		int height2 = 6;
		float jj2 = wid2 * 3 / (height2 * 4);
		
		System.out.println("jj:"+jj);
		System.out.println("jj2:"+jj2);
		
		jj = wid *3;
		System.out.println("jj:"+jj);

		jj = jj / (height * 4);
		System.out.println("jj:"+jj);
		
		jj =(float) wid * 3 / (height * 4);
		System.out.println("jj:"+jj);
		
		jj2 = 4/3;
		System.out.println("jj2:"+jj2);
	}

}


输出结果:

jj:1.0
jj2:0.0
jj:18.0
jj:1.5
jj:1.5
jj2:1.0

说明java隐式类型转换,结果是根据两个计算数类型来确定,保存为高优先级的那个。而:int1 *int2 / (int3 * int4),先计算int1*int2,在计算int3*int4,这两个临时值相除,出来连个整形临时值,所以结果也是整形,没有保存精度。只要对/两边任意一方加上float显示类型转换即可,(父母有一个float就是float,这里和c是一样的,根据最高优先级来确定儿子的)

和c语言是一样的,类型转换是看直系父母的,有的时候直系父母可能是临时值,这就可能出错了,要小心



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值