java的赋值运算符_Java赋值运算符

Java赋值运算符

赋值运算符目前也是只需要掌握=、+=、-=、*=、/=、%=,其它和二进制相关的内容也是到后面遇到的时候再详细学习。赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算符(+=、-=、*=、/=、%=)。我们来看一段代码:

public class AssignmentOperatorTest01 {

public static void main(String[] args) {

//基本的赋值运算符

int i;

i = 10;

System.out.println("i = " + i);

i = 100;

System.out.println("i = " + i);

//扩展的赋值运算符

int x = 10;

x += 1; //等同于x = x + 1

System.out.println("x = " + x); //11

int y = 10;

y -= 1; //等同于y = y - 1

System.out.println("y = " + y); //9

int z = 10;

z *= 2; //等同于z = z * 2

System.out.println("z = " + z); //20

int m = 10;

m /= 3; //等同于m = m / 3

System.out.println("m = " + m); //3

int n = 10;

n %= 3; //等同于 n = n % 3

System.out.println("n = " + n); //1

}

}

x += 1和x = x + 1真的是完全相同吗?我们来看下面的代码:

public class AssignmentOperatorTest02 {

public static void main(String[] args) {

byte b = 10;

//以下程序编译报错,编译器提示错误信息为:

//Type mismatch: cannot convert from int to byte

/*

* 编译没有通过的原因:b是byte类型,1是int类型,根据之前讲解的类型

* 转换规则得知,byte和int混合运算最后结果是int类型,int类型的值

* 无法直接赋值给byte类型的变量b,所以编译报错。

*/

//b = b + 1;

b += 1; //编译通过并可以正常运行

System.out.println("b = " + b); //11

//通过以上的测试得出:b = b + 1和b += 1是不一样的

//那么b += 1等同于什么呢?

/*

* 实际上java对于扩展类的赋值运算符进行了特殊的处理,所有

* 的扩展赋值运算符,最终都不会改变运算的结果类型,假设前面

* 的变量是byte类型,那么后面的表达式运算之后的结果还是byte

* 类型。所以实际上b += 1等同于:

*/

b = (byte)(b + 1);

System.out.println("b = " + b); //12

b += 1000; //编译通过,并且可以正常运行

/*

* 以上代码实际上等同于:b = (byte)(b + 1000);

* 分析得出,显然结果已经超出了byte类型取值范围,所以精度一定

* 会损失,最终的结果需要对计算机二进制的原码反码补码进行研究。

*/

System.out.println("b = " + b); //-12

}

}

根据以上代码测试得出,对于扩展类的赋值运算符在运算的过程中不会改变运算的结果类型,也就是说byte b = 100; b += 1000;b变量最初是byte类型,最后的运算结果还是一个byte类型。这是一条固定的语法规则,大家记住就行了,以后在使用扩展类赋值运算符的时候要谨慎,不小心就会精度损失的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值