【Java基础】a+=1与a=a+1

news/2024/10/30 21:29:42/

偶然在某个地方看到这个问题,第一反应是两者是有区别的,但是要说的很详细,一时又想不起来。所以在此记录下来。

首先,java中整数的默认类型是int型,浮点数的默认类型是double型。

数值的转换分为隐式转换和显式转换,隐式转换即jvm帮你去做转换,显式即你自己需要进行强制类型转换。

什么时候进行隐式转换呢,存储范围小的向大的转换,如int向long转换(long a = 10;),进行算术运算时(byte a = 1; int b = a + 1;)。显式则形如(byte a = (byte)200;),但是byte a = 1;却不需要强转,因为jvm编译时会先检查值有没有超出变量定义类型的范围,如果超出,则报错;如果没超出,jvm自动帮你转换。

啰嗦了这么多,进入正题,看下a+=1和a=a+1的区别。首先看一段代码:

byte a = 1;
a += 1;
a = a + 1;//该行会报错

a为byte型,a+=1没有报错,a=a+1却报错了,来看下为什么会报错。前面说到1默认是int型,a为byte型,a+1有算术运算符,所以a会发生隐式转换变为int型,a+1的结果为int型,而a本身为byte型,不能直接赋值,需要强转,改为a=(byte)(a+1);就不会报错了。

那么a+=1为什么就不报错呢,反编译看下,发现就是上面我们修改后的结果a=(byte)(a+1);也就是碰到简式运算符,jvm自动帮我们做了转换。

当然,这里a定义为long型,两个都不会报错。

有错误还请指正。


http://www.ppmy.cn/news/318481.html

相关文章

data2

VC注释宏是类似这样的宏: {{AFX_MSG_MAP(CDrawView) ON_WM_LBUTTONDOWN() }}AFX_MSG_MAP 是由MFC自动生成的一些被注释的代码,MFC的代码添加工具用它来定位MFC类成员函数或成员变量添加和删除的位置。 注释宏不是C语言的组成部分,可以说它…

Aria2 简介

目录 Aria2 简介配置安装window下安装 aria2图形化界面persepolisAria2GUI(网页版) 常用命令参考 Aria2 简介 Aria2 是一个多平台轻量级,支持 HTTP、FTP、BitTorrent 等多协议、多来源的命令行下载工具。Aria2 可以从多个来源、多个协议下载资源,最大的…

ARIMA模型介绍

什么是 ARIMA模型 ARIMA模型的全称叫做自回归移动平均模型,全称是(ARIMA, Autoregressive Integrated Moving Average Model)。也记作ARIMA(p,d,q),是统计模型(statistic model)中最常见的一种用来进行时间序列 预测的模型。 1. ARIMA的优缺点 优点&…

27、数据结构笔记之二十七数组的定义和概念

27、数据结构笔记之二十七数组的定义和概念 “人生最终的价值在于觉醒和思考的能力,而不只在于生存。-- 亚里斯多德” 学习了串以及串的几个应用,包括文本编辑,词索引等。这篇开始我们学习数组。首先来介绍数据的一些定义和概念。 1. 数组…

高等数学---行列式,矩阵

1.排列及其逆序数 对n个不同元素,规定各元素间一个标准次序。 在n个元素任一排列中,某个元素的先后次序与标准次序不同时,构成一个逆序。 一个排列中逆序的总数,称为这个排列的逆序数。 定理—可证明 一个排列中任意两个元素对…

mysql插入中文异常:Incorrect string value: ‘\xE5\xB0\x8F\xE9\xBE\x99...‘ for column ‘name‘ at row 1

问题:插入中文的时候显示:Incorrect string value: \xE5\xB0\x8F\xE9\xBE\x99... for column name at row 1 解决方法:找到mysql/my.ini 把字符集修改为uft8 如果还是不行找到你的table修改它的字符集

华南X99-F8D双路版主板华南金牌主板BIOS设置通电开机断电开机通电自动开机远程开机教程

华南X99-F8D双路版主板华南金牌主板BIOS设置通电开机断电开机通电自动开机远程开机来电自动开机来电开机教程

华南x99-f8黑苹果免驱网卡Wi-Fi正常蓝牙无法使用解决方法

如图,USB插针和debug插针中间有一组跳帽,出厂一般默认会插在USB一侧,这样会导致无线网卡的蓝牙无法使用。用无线网卡的朋友可以把跳帽插到SW一侧就可以完美解决