【Java基础】i = i + 1,i += 1, i++, ++i 的区别

从字节码角度分析i++与++i以及i+=1与i=i+1运算操作 变量的自增操作,如 i++ ++i i+=1 i=i++ 这些自增操作的算术运算可能计算的最后结果是一样,仅从代码层面很难看出它们的异同。下面将从字节码指令的角度去分析这些操作的不同之处。 i++与++i的区别 如果只是进行变量的自增的运算,不涉及赋值操作,那么i++和++i在字节码指令层面上是执行相同的指令 可以看出i++与++i的字节码指令是一样的,都是先将操作数10压入操作数栈,然后保存到局部变量表索引为1的位置,也就是保存变量i的位置,然后将局部变量表索引为1的位置的变量的值加1。 但是如果 阅读详情

问题引入:

最开始是因为看到了一个题:

① short s1 = 1; s1 = s1 + 1;
② short s1 = 1; s1 += 1;

上面两条是否都可以成功编译?

答:① 中,由于 1 是 int 类型的,因此 s1 + 1 也是 int 类型的,需要进行强制类型转换,才能赋值给 short;
② 中,s1 += 1 就相当于 s1 = ((short)s1 + 1),+= 本身就隐含着强制类型转换,故可正确编译。

问题拓展:

上面涉及到了 += 和 s1 = s1 + 1 的区别,除了 += 本身隐含强制类型转换以外,+= 的效率也会比 s1 = s1 + 1 高一些。

突然想起了多次看过的 i++ 和 ++i 的区别的问题,当时只是大概知道 i++ 是用完了再自增,而 ++i 是自增了再用,既然想到了,就从原理上搞搞清楚。

一个 Test 看 i++ 和 ++i:

查资料的过程中看到了一个题,自己去跑了一下:

package test;

public class test {

	public static void main(String[] args) {
		int i = 1;
		i = i++;
		System.out.println("i=" + i);
		int j = i++;
		System.out.println("j=" + j + " i=" + i);
		int k = i + ++i * i++;
		System.out.println("k=" + k + " i=" + i);
	}
}

输出结果:
在这里插入图片描述

原理分析:

从《深入理解Java虚拟机(第3版)》里可以看到,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

而这里会用到的是栈帧中的局部变量表、操作数栈。

对于 i++ 来说,一共需要 2 步:
① 把 i 放到操作数栈里;
② 对局部变量表里的 i 自增。

对于 ++i 来说,与上面相反:
① 对局部变量表里的 i 自增,此时操作数栈为空;
② 把 i 放到操作数栈里。

下面来看 test 里的每个语句对应着发生了什么,首先需要明确:

System.out.println 输出的是局部变量表里的值;
操作数栈,是一个后入先出栈。当一个方法刚刚开始执行的时候,该方法的操作数栈是空的,在方法执行的过程中,会有个各种字节码指令望操作数栈中写入和提取内容,也就是出栈和入栈操作。赋值操作是将操作数栈中的操作数经过运算后赋值给局部变量表中的变量的。

int i = 1; 此时局部变量表中为 i = 1 ,操作数栈为空。

i = i++; 注意不是 i++,是先 i++ 然后有个赋值操作:
① i 进操作数栈,此时局部变量表 i = 1 ,操作数栈 i = 1;
② 局部变量表中自增,此时局部变量表 i = 2,操作数栈 i = 1;
③ 赋值操作是将操作数栈中的数赋值给 i ,此时局部变量表 i = 1,操作数栈 i = 1。

int j = i++; 跟上面的操作类似,只是最终赋值给了 j :
① ②与上面的相同;
③ 将栈中的 i = 1 赋值给局部变量表中的 j,此时局部变量表 i = 2,j = i(1),操作数栈 i = 1。

int k = i + ++i * i++; 这条语句包含了四个部分,分别是 i ,i++,++i,以及最后计算完的赋值操作:

(1) int k = i + ++i * i++;
i 入栈,此时局部变量表 i = 2 ,操作数栈 i = 2;

(2) int k = i + ++i * i++;
①局部变量表中自增,此时局部变量表 i = 3 ,操作数栈 i = 2;
② i 入栈,此时局部变量表 i = 3 ,操作数栈 i = 3, i = 2;

(3) int k = i + ++i * i++;
① i 入栈,此时局部变量表 i = 3 ,操作数栈 i = 3,i = 3, i = 2;
② 局部变量表中自增 1,此时局部变量表 i = 4,操作数栈 i = 3,i = 3, i = 2;

(4) 赋值给 k
对操作数栈中的操作数进行运算,再赋值给局部变量表中的 k,即 k = 3 * 3 + 2 = 11。

参考资料:

  1. 《深入理解Java虚拟机(第3版)》
  2. 公众号文章:终于弄明白 i = i++和 i = ++i 的区别了!
TMS-EEG数据预处理:eeglab工具包TESA(一) b. 自动选择:Tools -> Reject data epochs -> Reject by probability,然后进行Plot -> channel,进行删除。TMS-EEG(经颅磁刺激-脑电图)是一种结合了TMS和EEG记录的技术,这种技术允许研究者在非侵入的情况下探测大脑环路,评估大脑的兴奋性和连通性等皮层特性。对移除脉冲伪迹的数据进行插值:Tools ->TESA -> Interpolate removed data;插值后,画图查看:数据会有数值; 阅读详情

相关推荐

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 526

【Java】i++、++i、i = i + 1 和 i += 1 的区别分析

目录第1部分 i++ 与 ++i 的区别第2部分 i++ (或者 ++i )与 i = i + 1 、 i += 1 的区别计算方式区别效率分析 第1部分 i++ 与 ++i 的区别 这两个的区别大部分人都知道,就简单提一下 i++ 是先进行赋值操作,后进行自增操作;而 ++i 是先进行自增操作,后进行赋值操作,举个栗子 int i = 1; int j; j = ++i; // 此时是先自...

Amadeus的博客 4388

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

Java中的i=i+1和i+=1以及i++和++i详解

一、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类型,系统也会将其值

qq_16268979的博客 1万+

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 175

保姆级拆解:HP 1312NF/CM1415打印机进纸离合器清洁与更换全记录(附B站/油管视频指路)

本文详细记录了HP 1312NF打印机进纸离合器故障的诊断与修复全过程,包括故障判断、工具准备、拆解步骤、清洁更换技巧及预防措施。特别针对离合器内部海绵老化粘连问题,提供了电工胶布和硬纸片两种实用替代方案,并附有B站/油管视频指路,帮助用户轻松完成打印机维修。

weixin_31102231的博客 377

Java中,i += 1、i = i + 1和i++有何区别?

如需转载,请标明转载来源,总结和码字都不易啊! Java中,i += 1、i = i + 1和i++有何区别? 今天在思考i += 1和i = i + 1的区别时,自己通过比较多种方式在编译期和字节码层面的差异,总结了本篇博客(纯原创!),本篇博客的所有实验都基于JDK8,不同版本的结果可能不同。当然本人水平有限(小白),可能有错误的地方,建议大家一起尝试一遍,看看大家的结果和结论是不是一样的,欢迎交流和指正,谢谢各位啦! Java中的整型类型默认为int,因此在对byte类型进行计算时,byte类型会自动

Println30的博客 4572

【python】import pandas as pd用法

是 Python 里最常用的数据分析库之一。 的意思是:导入 pandas 库,并给它起个别名 。这样用起来更简洁: 下面总结 pandas 的常见用法(配例子)。目录🔹 1. 数据结构(1) Series(一维数据,类似于数组 + 标签)(2) DataFrame(二维数据表,类似于 Excel 表格)🔹 2. 数据读写🔹 3. 数据查看🔹 4. 数据选择与索引🔹 5. 数据清洗🔹 6. 数据运算🔹 7. 数据筛选(布尔索引)🔹 8. 分组与聚合🔹 9. 排序 Pandas 常用方

2401_86285609的博客 1533

Java初学者常见问题之 i = i + 1; 详解

Java初学者常见问题之 i = i++; 详解

Walevebot的博客 601

别再瞎调参数了!分子动力学模拟新手必看的力场选择与验证实战指南

本文为分子动力学模拟新手提供力场选择与验证的实战指南,详细解析主流力场特性及适用场景,并通过水分子案例演示完整的验证流程。文章重点对比SPC/E、TIP3P和OPLS-AA三种力场在GROMACS中的表现,帮助读者避免常见参数调整误区,提升模拟准确性。

weixin_26934905的博客 426

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5738

java中i++和++i和i=i+1的原理及区别

在java(或c语言,这里以java为主)里面,i++和++i对于初学者来说,一直是一个特别容易搞混的内容,特别是那种 i=i++ 或 i=++i 这种求 i 的值。不过今天不用怕,看完这篇文章,相信你一定能搞清楚这俩个的区别!i++和++i的作用都是自增加一,但是两者的返回结果却不一样的。为什么呢?这主要得益于java的中间缓存机制。

m0_56253302的博客 1179

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

一看就懂的i++和++i详解

一看就懂的i++和++i详解 前言 我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了! 示例代码 请先自己心算一下答案,然后找个本子记下来,然后再跟我后面的答案对比,看你能做对几道题,能做对两题以上的我喊你大哥!! 示例1 int i = 0; i = i++; System.out.println("i = " + i); 123 示例2 int a = 2;

song854601134的博客 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java基础复习之赋值以short举例:i++,i+=1,i=i+1

1、这三者都是在原来的基础上进行加1操作。 2、i++ 和 i+=1操作是正确的,因为并没有改变i的数据类型。 3、但i=i+1则会报错,因为后面的加的1是int的类型,int类型不能直接转换成short类型 4、代码示例: public static void main(String[] args) { short i=1; i++; System.out.println(i); ...

weixin_39090185的博客 1798

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

return返回语句中i++、i += 1、i = i + 1的区别

如果这三个表达式是各自独立一行的,则表示的意思都是加1,但是若置于return返回语句中则大不相同 i++: /** * 测试 i++ */ public class test1 { public static void main(String[] args) { int i = 10; int x = get(i); System.out.println(x); } public static int get(int i){.

zyh201314zyh的博客 1918

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

i== i JAVA_JAVA的i++, i+=1, i=i+1有区别吗?

看一些JAVA基础题的时候,经常看到这个问题,很多人的解释是:i++最快,i+=1其次,i=i+1最慢。下面通过Sun JDK编译出来的字节码验证一下这个问题。为了让编译出来的字节码便于阅读,将这三个表达式分别写在一个方法里面:1 private voida(){2 int i=0;3 i += 1;4 }56 private voidb(){7 ...

weixin_35886636的博客 240

int i=0, i=i++ 和i++ 区别

int i=1; i=i++; System.out .print(i); 输出1 a=i++在我的理解是这样的,它先给i赋一个临时变量比如a,即a=i=1, 然后运算 i=i++, 在最后运算的时候 i 的值使用的是被赋值的临时变量a的值,并非变量本身 即 先运算在赋值 int a=i; i=i+1; i=a, return i; 可以看出i=a=1 ...

。度的博客 1万+

a += 1、a = a + 1、a++区别

1、a += 1 和 a = a + 1 区别 a类型不是int byte a = 1; a += 1;//1默认是int型,a为byte型,a+1有算术运算符,所以a会发生隐式转换变为int型,a+1的结果为int型,运行正常 a = a + 1;//a本身为byte型,不能直接赋值,该行会报错 a = (byte)(a+1);//需要强转,改为a=(byte)(a+1);就不会报错了 a类型是...

陳廿陆的博客 8053

JAVA基础之n+=1与n=n+1的区别

例子: short n = 10; n = n + 1;//编译失败 n += 1; 区别: n += 1;不会改变变量本身的数据类型。 而n = n + 1;编译失败,因为1默认是int,运算的结果n成了int类型。

一个超会写Bug的程序猿的博客 3934

java i++和++i的区别_你真的清楚 i = i++和 i = ++i 的区别吗?

前些天看完了JVM的内存结构,自以为自己是懂了,心里想想不就是分线程共享和线程私有嘛,然后又怎么怎么分怎么怎么的嘛…直到遇到了这道题目。说句实话,曾经自己做这种运算题目,完全是靠脑子空想,然后拿上笔颤抖的写下一个自己都不知道正不正确的答案。不过过了今天,我终于能确定它的答案了。1、题目packagepers.mobian.questions01;publicclasstest01{...

weixin_39529914的博客 82

详解Java中i++和++i的区别

i++ :先赋值再自增 先在i所在的表达式中使用i的当前值,后让i加1 ++i :先自增再赋值 让i先加1,然后在i所在的表达式中使用i的新值 以下列java代码为例: 运算结果为: 这表明: i++是指先把i=0的值赋值给j, 然后再自身加1; 对于++i: 运算结果为: 表明++i是指先自身加1后赋值给z; 还要注意二者的以下使用不同: // 测试三 i = 0; i+...

Guo_ping'blog 1052

【Java基础】分析在 Java 中 i++ 和 ++i 的区别

分析在 Java 中 i++ 和 ++i 的区别# 刚接触编程时,i++ 与 ++i 这类问题确实难以理解,即使知道它俩区别,还是不能做到学以致用,今天让我带领新手把它给摸透了,看它葫芦里卖的是什么药,高手可以飘过哦~~ 什么是 i++,什么是 ++i i++ 和 ++i 都是 i=i+1 的缩写,唯一区别是执行与引用的顺序。i++ 先引用后计算, ++i 先计算后引用 示例 int i=1; System.out.println(i++); // “先引用,后计算”:首先被 println 方法引用打

Ren_Shuishui的博客 320

i++ 和 ++i 详解

i++ 即后加加,原理是:先自增,然后返回自增之前的值++i 即前加加,原理是:先自增,然后返回自增之后的值一个变量也是表达式,多个表达式的加减法运算都是从左到右进行的表达式。

Gzzz的博客 7987

python中i_python开发_++i,i += 1的区分

在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法:1 int i = 0;2 ++ i; // -- i;这样的语法在上述编程语言中可以实现自增(减),在python中也支持这样的语法,不过在python中这样的用法不是用来自增(减),而是实现数学中的符号运算操作:1 i = 22 ++ i #输出:23 +(+i) #输出:24 -(+i) #输出...

weixin_39859128的博客 973

java i 和i,详解Java中i++和++i的区别

i++ :先赋值再自增先在i所在的表达式中使用i的当前值,后让i加1++i :先自增再赋值让i先加1,然后在i所在的表达式中使用i的新值以下列java代码为例: 运算结果为: 这表明: i++是指先把i=0的值赋值给j, 然后再自身加1;对于++i: 运算结果为: 表明++i是指先自身加1后赋值给z;还要注意二者的以下使用不同:// 测试三i = 0;i++;i++;i++;i++;i++;S...

weixin_30152861的博客 1668
上一篇: 【贪心入门】LeetCode #455 分发饼干
下一篇: 【贪心算法】LeetCode #55 跳跃游戏
Code_Yilia
博客等级 码龄11年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值