一、i=i+1和i+=1

(1)概念
i=i+1使用简单赋值运算,i+=1使用复合赋值运算

简单赋值运算和复合赋值运算的最大差别就在于:
  复合赋值运算符会自动地将运算结果转型为其左操作数的类型(即将不管i是什么数据类型,都会将右边int的1转换为i的类型)。
(2)实例

//方式一:
byte i=7;
i+=1;
//方式二:
byte i=7;
i=i+1;

第一种写法编译没问题,而第二种写法却编译通不过。原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。

byte b=120
b+=20;
System.out.println("b="+b);//-116

上例中输出b的值不是140,而是-116。因为120+20的值已经超出了一个byte表示的范围,而当我们使用复合赋值运算时系统会自动作类型的转化,将140强转成byte,所以得到是-116。由此可见,在使用复合赋值运算符时还得小心,因为这种类型转换是在不知不觉中进行的,所以得到的结果就有可能和你的预想不一样。

二、i++和++i

i++是先传递结果后加,而++i刚好相反,是先加后传递结果

(1)区别对比
1、赋值顺序不同
  ++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。
  因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。
  形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。

2、效率不同
  比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中**++i比i++效率要高些**。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。

3、 i++不能作为左值,而++i可以
  左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
  但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。

(2)实例

for(int i=0; i<5; i++){System.out.println(i+1);
}
//1 2 3 4 5
for(int i=0; i<5; i++){System.out.println(i++);
}
//0 2 4
for(int i=0; i<5; i++){System.out.println(++i);
}
//1 3 5

Java中的i=i+1和i+=1以及i++和++i详解相关推荐

  1. java中多线程之CAS(compareAndSet),Unsafe类大白话详解.

    java中多线程之CAS(compareAndSet),Unsafe类大白话详解 什么是CAS CAS原理 Unsafe类:     什么是CAS 比较并交换 在学习CAS之前,我们先了解一下JMM. ...

  2. java中for的常规用法_Java for循环的几种用法详解

    本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方 ...

  3. java中的getnumber怎么用_java安全编码指南之:Number操作详解

    简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...

  4. Java中的微信支付(1):API V3版本签名详解

    1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的 API 已经发展到V3版本,采用了流行的 Restful 风格. 微信支付V2 ...

  5. java中byte装箱和装箱_Java包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备"对象"的特性--不携带属性.没有方法可调用. 沿用它们只是为了迎合 ...

  6. java前端长连接框架_Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器 ...

  7. 从Java程序员进阶到架构师,6大核心技能要领详解

    " java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...

  8. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

  9. java ear war_基于Java的打包jar、war、ear包的作用与区别详解

    基于Java的打包jar.war.ear包的作用与区别详解 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希 ...

最新文章

  1. BeanUtils工具包操作JavaBean
  2. cocos2d-x 3.2读取xml和json练习
  3. html请求接口_前端工程师吐后端工程师(第八讲)——接口的开发
  4. 人工神经网络模型与分类
  5. iMX6开发板-uboot-网络设置和测试
  6. html 百分比正方形,css实现未知宽度的正方形需求
  7. 四窗口卖票 自己的票
  8. MTK 驱动---(10) emmc总线
  9. java 端口_java – 如何找到可用的端口?
  10. 树形打印lua table表
  11. ES6小实验-复习字符串
  12. libpcap中主要函数使用介绍
  13. 经常用到的七大离线仿真软件盘点
  14. 我的数据库是半瓶子水的水平
  15. CentOS官网下载对应版本
  16. 微信重磅更新!上线4个实用功能,尝鲜体验有木有你想要的功能
  17. zookeeper的原理和应用(非常详细透彻)
  18. 检测屏幕.html,15款html5响应式网站跨屏幕测试工具
  19. mmorpg小地图系统制作
  20. BOM_创建更新物料清单脚本

热门文章

  1. 使用fastjson解析json抓取新浪新闻文章
  2. /etc/profile 和~/.bash_profile区别
  3. 带领你打开C++神秘之门--入门篇
  4. 第四章 JavaWeb CSS入门 核心基础 基础形式 + 选择器
  5. 数字经济的发展需要包括区块链在内的八大技术的支撑360云储
  6. 使用getElementsByTagName()和namedItem()获取特定元素
  7. 基于MATLAB的多进制数字调制信号的矢量星座图分析
  8. HTML+CSS网页设计期末课程大作——体育足球(5页面)
  9. 【EasyClick iOS免越狱常见问题】脚本运行 显示执行异常:com.js.main
  10. 百度云生态分享日| 网络技术及应用主题沙龙圆满落幕