Java基础 第一节 第十课

举报
我是小白呀iamarookie 发表于 2021/09/10 23:56:55 2021/09/10
【摘要】 扩展知识点 += 符号的扩展常量和变量的运算 += 符号的扩展 下面程序有问题吗? public static void main(String[] args){ short s = ...

+= 符号的扩展

下面程序有问题吗?

public static void main(String[] args){
	short s = 1;
	s+=1;
	System.out.println(s);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

分析: s += 1 逻辑上看作是 s = s + 1. 计算结果被提升为int类型, 再向short类型赋值时发生错误, 因为不能将取值范围大的类型赋值到取值范围小的类型. 但是, s = s + 1进行两次运算, += 是一个运算符, 只运算一次, 并带有强制转换的特点. 也就是说 s += 1 就是 s = (short)(s + 1), 因此程序没有问题编译通过, 运行结果是 2.

常量和变量的运算

下面的程序有问题吗?

public static void main(String[] args){
	byte b1=1;
	byte b2=2;
	byte b3=1 + 2;
	byte b4=b1 + b2;
	System.out.println(b3);
	System.out.println(b4);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

分析: b3 = 1 + 2 , 1 和 2 是常量, 为固定不变的数据, 在编译的时候 ( 编译器 javac ), 已经确定了 1 + 2 的结果并没有超过 byte 类型的取值范围, 可以赋值给变量 b3, 因此 b3 = 1 + 2 是正确的.

反之, b4 = b2 + b3, b2 和 b3 是变量, 变量的值是可能变化的, 在编译的时候, 编译器 javac不确定 b2 + b3 的结果是什么, 因此会将结果以int类型进行处理, 所以int类型不能赋值给byte 类型, 因此编译失败.

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/109893710

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。