Java 自增、自减

i++/i--

  先使用变量的值,然后改变变量的值;

++i/--i

  先该表变量的值,然后使用变量的值;

学习Java的时候没有思考过java中变量自增的原理,今天遇到一道java题目,有点懵:int i = 0;
i = i++;

  最终变量i的值到底是变成1呢还是保持为0呢?

  java中变量自增、自减的实现其实使用了一个临时中间变量作为缓存。

以i++为例:

1     public static void main(String[] args) {
2         int i = 0;
3         int j = i++;
4     }

以上代码其实相当于:

    public static void main(String[] args) {
        int i = 0;
        int temp = i;
        i += 1;
        int j = temp;
    }

所以,i = i++的结果是i的值为保持不变。

public static void main(String[] args) {    int i = 0;    i = i++;}

其实等于
public static void main(String[] args) {    int i = 0;    int temp = i;    i += 1;    i = temp;}

原文地址:https://www.cnblogs.com/KenBaiCaiDeMiao/p/11692110.html

时间: 2024-10-10 18:30:56

Java 自增、自减的相关文章

java自增自减运算符

除了这+ - * / % 这5个算术运算符之外其实还有2种 ++ - - 这两个也可以属于算术运算符.他是自增自减运算的,例如:int i = 10; i++; i- - 或 ++i - -i但是这2个比较特殊,他有先运算和后运算一说.++ - -符号在后面的为后运算,++ - -符号在前面的为先运算例如:i++ i- - 这为后运算,++i - -i这为先运算. ++ - - 他是一个缩写的方式,融合了2句代码的缩写. 例如:int i = 100; int a = i; i = i+1; 意

java中自增自减运算与c中自增自减的区别

今天看到java面试宝典里面有一道题目是这样的: 答案是0,我开始也有疑问,后来看到后面说到java的中间缓存变量,后来到网上查了查,终于理解了,是什么意思了.请看下面的代码和解释: package com.wj.demo; public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int j=0; for(int i=

Java后缀自增/自减表达式的返回值

Java后缀自增/自减表达式的返回值 今天看到一段代码,描述循环k次 while(k-- > 0){ //... } 直觉上认为是错的,k--后值变成了k-1,循环应该只能执行k-1次吧.实际这段代码是正确的.在Java8语言规范15.14.3中有以下描述: The value of the postfix decrement expression is the value of the variable before the new value is stored. 即后缀自减表达式的值为存储

PHP的自增自减操作

PHP的变量可以存放任意类型的值.对变量执行自增自减操作时,其值的类型范围广,不仅限于数值类型.Perl等弱类型的语言均有此特征.而Java等变量值严格区分类型的语言,此种操作则仅限于数值类型值. 当字符串中有数值的各进制标识符(0x.0b等).科学记数法的标识符(E)时,会有特例,需要加以注意. 递增/递减运算符不影响布尔值.递减NULL值也没有效果,但是递增NULL的结果是1.在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的. $a = TRUE;var_dump(

Java自增原子性问题(测试Volatile、AtomicInteger)

这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步方法.接着问,那有没有更好的方法? 经过一番百度.谷歌,还可以用AtomicInteger这个类,这个类提供了自增.自减等方法(如i++或++i都可以实现),这些方法都是线程安全的. 一.补充概念 1.什么是线程安全性? <Java Concurrency in Practice>中有提到:当多个

黑马程序员————C语言基础语法二(算数运算、赋值运算符、自增自减、sizeof、关系运算、逻辑运算、三目运算符、选择结构、循环结构)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲  算数运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1.加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2.减法运算- 除开能做减法运算,还能表示符号:-10.-29 3.乘法运算* 注意符号,不是x,而是* 4.除法运算/ 注意符号,不是÷,也不是\,而是/ 整数除于整数,还是整数.1/2的值是0,这个并不是二分之一 5.取余运算% 什么是取余:两个整数相除之后

[转]C语言中自增自减运算符教学探究-中国论文网

摘要:C语言教学中,自增自减运算符运用得非常广泛,且具有一定的使用技巧和难度.在诸多运算符中,自增自减运算符是学生最难理解和最易出错的运算符.对自增自减运算符的功能和具体应用进行探究,以期为提高C语言教学效果提供帮助.中国论文网 http://www.xzbu.com/8/view-3865031.htm 关键词:C语言:自增自减运算符:教学效果 中图分类号:G434文献标识码:A文章编号:1672-7800(2012)012-0188-02 0引言 C语言编程设计中,若合理使用自增自减运算符,

前置后置自增自减操作

class Int { friend ostream& operator<<(ostream& os, const Int& i); friend istream& operator>>(istream& is, Int& i); friend bool operator<(const Int& a, const Int& b); private: int value; public: Int():value(0

自增/自减运算符

因为做以下题有感...原来简单的自增运算符也有这么多猫腻 http://blog.csdn.net/zdarks/article/details/8767087 第五题  参考:c程序设计语言2.8章   Vs2015测试: a[6]={0};t=h=0; a[0]=a[0]++ 1 a[1]=++a[1] 1 a[2]=t++ 0 a[3]=++h 1 COUT<<a[4]++ 0 COUT<<++a[5] 1 自增自减只能作用于变量,不能作用于表达式 在不需要使用任何具体值且仅

自增自减运算法的深入理解

例二: int i=3;  int j=4;  int a = i++ + i++;  int b = ++j + ++j;  printf("%d, %d\n", a, b); 问题又来了,i++ + i++是先自增一次,相加,再自增,然后赋值呢,还是先相加赋值然后自增两次呢.另外,++j又将如何表现呢? 结果是:6,12 这下明白了,原来 i++的理解应该是执行完整个表达式的其他操作后,然后才自增,所以例子中的a=3+3=6:而后i再自增2次,i=5:相反,++j是先自增然后再参加