今天发现了一点小问题(有关byte)

今天在敲代码的时候,用到了byte这一数据类型.用完之后我才发现,其实我并不了解他。

贴一个我敲的代码。

package Dawn;
public class test {
	public static void main(String[] args) {
		byte a = 3+7;  
		System.out.println(a);  
	}

}
上边这个这个代码是正确的。然而下边的代码却是错误的。

package Dawn;
public class test {
	public static void main(String[] args) {
		byte a;
		byte b= 126;
		byte c= 5;
		a= b-c;
		System.out.println(a);  
	}
}


通过这个问题,我自行搜索了一下。发现了一些“不可描述”的东西- -!

在java中,char,short,byte在进行运算时,是会自动变成int类型的。因此b-c就已经属于int类型了。所以将int类型的运算结果赋值给byte类型的a编译是会报错的。我们在b-c前面加上一个(byte)来进行强制转换就会编译通过。

这个知识点我之前也没有发现过- -弥补了一点知识漏洞!欣慰!这波不亏!


还有一个知识点就是有关简单赋值运算和复合赋值运算的问题。相关知识没有打牢所以出现了一些问题,我一直以为a+=1就等价于a=a+1,其实有些情况下这是不对的。

比如:

package Dawn;

public class test {
public static void main(String[] args) {
	byte a=5;
	a+=1;
	System.out.println(a);
}
}
这是可以通过编译并且可以正常运行的代码。

但是:

package Dawn;

public class test {
public static void main(String[] args) {
	byte a=5;
	a=a+1;
	System.out.println(a);
}
}
这个代码在编译的时候就不会通过了。这是为什么呢?

在上述中,我也说了,char,short,byte在运算的时候是会自动转换成int类型来进行运算的。但是在复合运算中,即使右边的结果是int类型,系统也会自动将其值自动转化为byte类型,但是简单赋值运算却没有这样的优待,系统会认为这是将int类型的值赋值给byte类型的变量,因此,编译不会通过~


今天你们收获了吗?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值