java中的前++和后++的区别示例代码详解

java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别!

其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加!

前++和后++总结:其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加!

请大家看下面的例子就明白了!

public class Test {

	public static void main(String[] args) {

		//测试,前加加和后加加
		//前++和后++总结:其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加!
		int age = 6;
		//先自加,再使用(age先自加1,然后再打印age=7,此时age的值在内存中是7)
		System.out.println("age=" + ++age);
		//先使用,再自加(此时age的值在内存中是7,先打印age=7,然后age再自加1,所以此时打印age=7,但是其实此时age的值在内存中已经是8了)
		System.out.println("age=" + age++);
		//此时打印出来age=8
		System.out.println("age=" + age);
		//先自加,再使用(此时age在内存中的值是8,先自加1,age的值在内存中就变成了9,然后再打印age,所以此时打印出9)
		System.out.println(++age);
		//先使用,再自加(此时age在内存中的值是9,先打印出9,然后age再自加1,自加完后,此时age在内存中的值是10)
		System.out.println(age++);
		//此时打印age是10
		System.out.println(age);
               
                int index = 0;
                String[] names = {"令狐冲", "张无忌", "韦小宝", "杨过", "段誉", "乔峰"};
        //        System.out.println(names[index++]); //打印出令狐冲
        //        System.out.println(names[index]);   //打印出张无忌   
    //以上两行代码注释掉,那么以下两行代码,就会打印出张无忌
    //如果以上两行代码没有注释掉,那么以下两行代码,就会打印出韦小宝
                 System.out.println(names[++index]); //打印出张无忌
                System.out.println(names[index]);  //打印出张无忌
 }
}

PS:下面看下Java中i++和++i的区别

  • 说来惭愧,从事开发工作也有一年时间了,然而在今天的一个业务逻辑里突然发现原来我对i++和++i都没有理解,或者说我之前的理解是错误的。这对于一个有追求的程序猿是不能容忍的。知道之后,迅速恶补学习,现在算是彻底的理解了。
  • 这篇文章可能对于大神没什么用,毕竟技术层次不够,大神追求的都是思想层面的东西。但对于一些初学者的话还是有一些用的,或者有跟我一样的已经入行一些时间了,但对这个理解模糊的(IT界估计也就我一个了 ~~捂脸!)都可以参阅学习,我写的比较详细,相信只要你看,就绝对会有收获

1, i++ 和++i


在区分这两个之前,我们先来了解一下它们的运算规则

int i=1,a=0;

* i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1
  * ++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2

看下面程序运行结果,有图有真相:

public class Test3 {
	public static void main(String[] args) {
		int i=1,a=0;
		System.out.println("a=i++===> "+(a=i++));//1
		//System.out.println("a=++i===> "+(a=++i));//2
	}

}


这里算是基本了解了,那么我们在来一个练习让你更加的理解它们之间的关系

public class Test3 {
	public static void main(String[] args) {
		int y=0;
		int i =0;
		y=++y;
		y=++y;
		y=++y;
		y=++y;
		y=++y;
		System.out.println("y="+y);
		i=i++;
		i=i++;
		i=i++;
		i=i++;
		i=i++;
		System.out.println("i="+i);

	}

}

附上结果

是不是感觉有点转过转弯来,如果有这种感觉,那么恭喜你(找到跟我之前症状相同的了,哈哈),你也得好好理解理解了。下来是我添加上详细注释的代码。

public class Test3 {
	public static void main(String[] args) {
		int y=0;
		//注意"="是赋值,"=="才是相等
		//这里的y=++y 是先运算在赋值,先运算++y完了后y的值是1,然后在赋值给原来等于0的y
		y=++y;// y==0,++y==y+1; 结果y=++y == y+1 == 0+1 ==1
		y=++y;// y==1,++y==y+1; 结果y=++y == y+1 == 1+1 ==2
		y=++y;// y==2,++y==y+1; 结果y=++y == y+1 == 2+1 ==3
		y=++y;// y==3,++y==y+1; 结果y=++y == y+1 == 3+1 ==4
		y=++y;// y==4,++y==y+1; 结果y=++y == y+1 == 4+1 ==5
		System.out.println("y="+y);//5
		int i =0;
		// i==0,i++==0; 结果i=i++ == (记住先赋值后运算)i=i,i=i+1(由于是i++运算这里我们输出的i只取先赋值的结果也就是i=i)
		i=i++;
		i=i++;
		i=i++;
		i=i++;
		i=i++;
		System.out.println("i="+i);//0
		System.out.println("================");//1

	}

}

总结

到此这篇关于java中的前++和后++的区别示例代码详解的文章就介绍到这了,更多相关java 前++和后++内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JNI实现最简单的JAVA调用C/C++代码

    JNI,是Java Native Interface的简称,中文是"Java本地调用".通过这种技术可以做到以下两点: Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数. Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数. 本篇博客带给童鞋们以下内容,学习内容来自(传智播客),经由小巫总结整理: javah工具的用法 按照C/C++头文件来编写C/C++源文件 将C/C++源文件编译成动态

  • java和c/c++ 数据类型长度的比较

    1. c语言中的整数类型有char, short, int, long等几种, 下面是C语言对每种数据类型长度的规定: (a). short和long类型的长度不相同 (b). int类型通常同具体机器的物理字长相同 (c). short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短. 2. sizeof(

  • Java通过调用C/C++实现的DLL动态库——JNI的方法

    由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅: 采用的方法是JNI: Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互. 下面是从网上摘取的JNI工作示意图: 总体说明:先在JAVA中建立一个类,通过javac生成.class,再由javah生成.h:然后将.h复制到VC下,由VC实现具体函, 并编译通过后生成DLL,将DLL放入JAVA工程中使用,完毕. 下面说说具体步骤(含实

  • Java和C++通过new创建的对象有何区别?

    前言 本文我们不去谈int.float.char等基本数据类型,而是用一般的类来说明.因为Java中可以直接通过 int varName 的方式来定义和使用一个基本类型的变量,但对于其它一般类型的对象,必须使用 new 来创建. 因此,为了更一般性地分析,体现两种语言创建对象的差异,我们用自定义的类 Student 进行说明,以下内容均针对一般的类而言. Java 在 Java 中,我们可以通过如下方式定义变量: Student s; //定义标识符s,没有实际空间 Student s = ne

  • golang、python、php、c++、c、java、Nodejs性能对比

    本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不得不用神奇的斐波那契算法.可能是比较常用或好玩吧. 好了,talk is cheap, show me your code! 打开Mac,点开Clion开始Coding吧! 1.怎么第一是Go呢,因为我个人最近正在用,感觉很不错 package main import "fmt" func main(){ fmt.Println(fibonacci(34)) } func fib

  • java及C++中传值传递、引用传递和指针方式的理解

    java的值传递理解: 代码1: public class Test { /** * @param args */ public static void main(String[] args) { StringBuffer buffer= new StringBuffer("colin"); SChange(buffer); System.out.println( buffer); } public static void SChange (StringBuffer str) { st

  • 安卓应用开发通过java调用c++ jni的图文使用方法

    首先建议一个工程 HelloJni如下图: 按照默认的配置下一步,直到完成 . 如下图操作,点击windows菜单->Prefrence菜单: 弹出如下图:选择Andriod ->NDK: 配置完成以后,点击工程属性菜单: 做这一步的目的是,增加对c++代码的支持,他会自动生成一些东西,你会看到多一个jni的文件夹. 这个名字可以默认,就用工程的名字,实际上就是产生的c++代码生成.so文件的名称(windows上的dll文件). 完成以后.可以看代码,生成一个HelloJni的.cpp文件.

  • java中的前++和后++的区别示例代码详解

    java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别! 其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加! 前++和后++总结:其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加! 请大家看下面的例子就明白了! public class Test { public static void main(String[] args) { //测试,前加加和后加加 //前++和后++总结:其实大家只要

  • Java中SSM框架实现增删改查功能代码详解

    记录一下自己第一次整合smm框架的步骤. 参考博客和网站有:我没有三颗心脏 How2J学习网站 1.数据库使用的是mySql,首先创建数据库ssm1,并创建表student create database ssm1; use ssm1; CREATE TABLE student( id int(11) NOT NULL AUTO_INCREMENT, student_id int(11) NOT NULL UNIQUE, name varchar(255) NOT NULL, age int(1

  • Java 添加Word目录的2种方法示例代码详解

    目录是一种能够快速.有效地帮助读者了解文档或书籍主要内容的方式.在Word中,插入目录首先需要设置相应段落的大纲级别,根据大纲级别来生成目录表.本文中生成目录分2种情况来进行: 1.文档没有设置大纲级别,生成目录前需要手动设置 2.文档已设置大纲级别,通过域代码生成目录 使用工具: •Free Spire.Doc for Java 2.0.0 (免费版) •IntelliJ IDEA 工具获取途径1:通过官网下载jar文件包,解压并导入jar文件到IDEA程序. 工具获取途径2:通过Maven仓

  • PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )

    PHP中有eAccelerator.memcached.xcache.APC 4个加速.缓存扩展,下面给大家介绍下其区别,一起看看吧! 折腾VPS的朋友,在安装好LNMP等Web运行环境后都会选择一些缓存扩展安装以提高PHP运行速度,常被人介绍的有 eAccelerator.memcached.xcache.Alternative PHP Cache这几个缓存扩展,它们之间有什么区别?分别的作用又是什么?我们如何选择?这是本文给于大家的答案. 1.eAccelerator eAccelerato

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • Java中==与equals()及hashcode()三者之间的关系详解

    目录 1.= = 2.equals() 3.重写equals() 4.equals()比较流程 5.hashcode() 1.= = =为赋值运算符,==为比较运算符,仅比较对象的内存地址,无法比较真正意义上的相等! JDK里的equals方法就是通过==来实现的比较对象的内存地址 以Integer为例 Integer a = 127; Integer b = 127; System.out.println(a == b);//true Integer c = 128; Integer d =

  • 关于java中可变长参数的定义及使用方法详解

    JAVA中可以为方法定义可变长参数( Varargs)来匹配不确定数量的多个参数,其定义用"..."表示.其实,这类似于为方法传了一个数组,且在使用方法上也和数组相同,如下: public void test(String... str){ for(String s : str){ } } 调用方法就像普通的调用方式相同,只不过可以匹配的参数为0到多个.如下: test(); test("lilei"); test("lilei","h

  • Java 中桥接模式——对象结构型模式的实例详解

    Java  中桥接模式--对象结构型模式的实例详解 一.意图 将抽象部分与它的实现部分分离,使他们都可以独立的变化. 二.适用性 以下一些情况使用Bridge模式 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如这种情况可能因为,在程序运行时刻实现部分应可以被选择或者切换. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充. 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译

  • SpringBoot中注解@ConfigurationProperties与@Value的区别与使用详解

    目录 注解@ConfigurationProperties 注解@Value 区别 松散语法绑定: SpEl语法表示: JSR303数据校验: 复杂类型封装: 配置文件注入值数据校验 注解@ConfigurationProperties 该注解的作用是将配置文件中配置的每一个属性的值,映射到这个组件中.@ConfigurationProperties :告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定 prefix = "person":配置文件中哪个下面的所有

  • Java  中桥接模式——对象结构型模式的实例详解

    Java  中桥接模式--对象结构型模式的实例详解 一.意图 将抽象部分与它的实现部分分离,使他们都可以独立的变化. 二.适用性 以下一些情况使用Bridge模式 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如这种情况可能因为,在程序运行时刻实现部分应可以被选择或者切换. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充. 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译

随机推荐