Java: 隐性赋值(Implicit Assignment)
初学 Java 时,我总是记不住如何区别 i++ 和 ++i。在《算法(第四版)》一书中第16页,作者提到:
** ++i ** is the same as i = i+1, and has the value i+1 in an expression. The code ** i++ ** is the same except that the expression value is taken ** before ** the increment, ** not after **.
即,
i++ 在表达式中使用的时候,该表达式的值取的是 ++ ** 之前的 i ** 的值。
++i,则相反,表达式的值取的是 ++ ** 之后 的 i ** 的值。
这里要注意区分两个值:
1。i 的 值
2。表达式(i++ 或 ++i) 的值
无论 表达式是 i++ 或 ++i, i 的值都是增加 1, 而表达式的值则不一定。
让我们来看一下代码:++i
int i=0;
for (int j=0; j<2; j++){
System.out.println("before: i = "+ i);
System.out.println("++ i = " + (++i));
System.out.println("after: i = "+ i);
}
运行后的结果:表达式的值取得是 当前 i 的值 加 1
before: i = 0
++ i = 1
after: i = 1
before: i = 1
++ i = 2
after: i = 2
再试一下 ++i:
int i=0;
for (int j=0; j<2; j++){
System.out.println("before: i = "+ i);
System.out.println("i ++ = " + (i++));
System.out.println("after: i = "+ i);
}
运行后的结果:表达式的值取得是当前的 i 的 值。
before: i = 0
i ++ = 0
after: i = 1
before: i = 1
i ++ = 1
after: i = 2
Java: 隐性赋值(Implicit Assignment)的更多相关文章
- [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序
本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...
- java jdbc ResultSet结果通过java反射赋值给java对象
在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...
- 解构赋值 Destructuring Assignment
解构赋值 Destructuring Assignment ES6中可以通过一定的模式将数组或对象中的值直接赋值给外部变量,称为解构 对象的解构赋值 // 在ES5中,当需要获取一个对象中的变量值的时 ...
- '增量赋值(augmented assignment)', 多么痛的领悟!
'增量赋值(augmented assignment)', 多么痛的领悟! 深刻理解x += a 与 x = x + a 的不同: 按理说上面的两条语句是等价的, 功能上完全一样的. 之所以说不同, ...
- Java学习随笔2:Java复合赋值表达式的小问题
问题:i += j只是i = i + j的简写么? 答案:非也!看下面的程序: int i = 5; long j = 8; i += j; // 可以通过编译且结果正确 i = i + j; // ...
- java 对象赋值问题
import java.io.*; class CCircle{ private static double pi = 3.1415; private double radius; public CC ...
- Java未赋值变量的默认初始值
在 Java 程序中,任何变量都必须经初始化后才能被使用.当一个对象被创建时,实例变量在分配内存空间时按程序员指定的初始化值赋值,否则系统将按下列默认值进行初始化: 数据类型 初始值 byte 0 s ...
- Java对象赋值与引用
当需要创建多个相同类型的对象且有某些字段的值是相同的,如果直接 get,set 的话,属性多的时候代码会很长,于是乎,以下代码产生了( java 基础差没搞清楚赋值与引用) 复制代码 1 User u ...
- Java中赋值常量的注意事项
写在前面: 从网上学习的赋值规则 摘录自网络,标明出处 byte,short,int,long 比如 int a = 234; 此处的常量234类型默认是int,如果要将大的整数赋值给变量的话 必须 ...
随机推荐
- Django之Model世界
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数 ...
- The Art of Prolog:Advanced Programming Techniques【译文】
申明:此文为译文,仅供学习交流试用,请勿用作商业用途,造成一切后果本人概不负责,转载请说明.本人英语功力尚浅,翻译大多借助于翻译工具,如有失误,欢迎指正. 逻辑程序简介 逻辑程序是一组公理或规则,定义 ...
- 使用C#操作文件
读写文本文件 使用C#读写文本文件需要5个步骤: 1.创建文件流 2.创建阅读器或者写入器 3.执行读写操作 4.关闭阅读器或者写入器 5.关闭文件流 例 using System; using Sy ...
- 3391: [Usaco2004 Dec]Tree Cutting网络破坏
3391: [Usaco2004 Dec]Tree Cutting网络破坏 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 76 Solved: 59[ ...
- lnmp pathinfo问题
location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 ...
- java日期处理函数
java中获取本年第一天的日期 public static Timestamp getYearFirstDay() { Calendar calendar = Calendar.getInstance ...
- python自动化框架(unnitest+selenium+htmlreport)
上一篇零零散散的写了一些python unnitest的一些知识,这里讲讲我在实际中使用到的自动化测试框架,算是上篇记录的补充!其实我觉得:什么框架都无所谓,关键是当如果用你的框架发现了bug,能尽量 ...
- CSS常见兼容性问题总结
原文链接:渔人码头 http://www.cnblogs.com/imwtr/p/4340010.html?utm_source=tuicool&utm_medium=referral 浏览器 ...
- Javascript动态创建 style 节点
有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件.如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时. 静态外部 css 文件语法: @import ...
- 任务调用及远端管理(基于Quartz.net)
这篇文章我们来了解一些项目中的一个很重要的功能:任务调度 可能有些同学还不了解这个,其实简单点说任务调度与数据库中的Job是很相似的东西 只不过是运行的物理位置与管理方式有点不一样,从功能上来说我觉得 ...