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

在java(或c语言,这里以java为主)里面,i++和++i对于初学者来说,一直是一个特别容易搞混的内容,特别是那种 i=i++ 或 i=++i 这种求 i 的值。

不过今天不用怕,看完这篇文章,相信你一定能搞清楚这俩个的区别!

基本概念

i++和++i的作用都是自增加一,但是两者的返回结果却不一样的。为什么呢?这主要得益于 java的中间缓存机制

快速区分

i++

返回值是 i 的初始值,但i本身是变化了的。

原理:先把初始的 i 的值存入临时缓冲区,对栈中的 i 进行加1操作,操作完毕后,出栈,但是最后返回的是临时变量区里面的值(原来初始 i 值)。jvm把它当作2个不同的变量了。

i=i++ 等效于

tmp=i;

i=i+1;

i=tmp

++i

返回值是 i+1的值,i本身是不变的。

原理:与i++相反,jvm将i值拷贝,将复制体(拷贝的i值)入栈操作加1,然后出栈,返回出栈的值。原始 i 不变。

i=++i 等效于

tmp=i;

tmp=tmp+1;

i=tmp

总结

所以,i=i+1i=i++ 是不一样的!!!而i=++i 则是等效于 i=i+1 的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java的BigInteger类是用于处理大数的类。它可以处理比long类型更大的整数。BigInteger类的原理是使用一个int类型的数组来存储大数的每个位。数组的每个元素都是大数的一部分。这个数组被称为mag[]。 1. 按位取反:BigInteger类提供了not()方法来实现按位取反的操作。该方法首先创建一个与原始BigInteger对象相同长度的int数组result[]。然后,通过循环遍历result[]数组,将mag[]数组的每个元素取反并存储到result[]数组。最后,使用valueOf()方法将result[]数组转换为一个新的BigInteger对象并返回。 示例代码如下: ```java public BigInteger not() { int[] result = new int[intLength()]; for (int i = 0; i < result.length; i++) { result[i] = ~getInt(result.length - i - 1); } return valueOf(result); } ``` 2. 按位与操作:BigInteger类提供了and()方法来实现按位与操作。该方法首先创建一个长度为两个BigInteger对象较大的int数组result[]。然后,通过循环遍历result[]数组,将mag[]数组和另一个BigInteger对象的mag[]数组对应位置的元素进行按位与操作,并将结果存储到result[]数组。最后,使用valueOf()方法将result[]数组转换为一个新的BigInteger对象并返回。 示例代码如下: ```java public BigInteger and(BigInteger val) { int[] result = new int[Math.max(intLength(), val.intLength())]; for (int i = 0; i < result.length; i++) { result[i] = (getInt(result.length - i - 1) & val.getInt(result.length - i - 1)); } return valueOf(result); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值