动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

30天自动登录
微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

实例解析Java赋值运算符

05-18 17:28 323浏览
举报 T字号
  • 大字
  • 中字
  • 小字

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

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类型。这是一条固定的语法规则,大家记住就行了,以后在使用扩展类赋值运算符的时候要谨慎,不小心就会精度损失的。

通过上面的例子,我们不难发现这几个赋值运算符其实有很多相似之处,有很多共通的地方,所以,相对来说,Java中的赋值运算符算是比较简单的,想要学习其他类型的运算符知识我们可以到动力节点在线的视频课程免费学习。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵316
程序员代码小兵316

16篇文章贡献58453字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

代码小兵66904-21 20:01

6道经典算法面试题

杨晶珍05-12 16:39

简述Spring MVC的核心组件

代码小兵49806-11 16:26

SpringMVC 中的组件

代码小兵49806-11 16:28

Spring常见面试题

代码小兵92504-17 16:07

发评论

举报

0/150

取消