Java后缀增量运算符(i++)是否创建新对象 我正在阅读C++ 101规则指南和最佳实践,在第28条中,他们声明如果我们不需要变量的旧值,则避免后增量运算符,因为这个操作符创建了一个副本,因此性能损失很小。

Java后缀增量运算符(i++)是否创建新对象 我正在阅读C++ 101规则指南和最佳实践,在第28条中,他们声明如果我们不需要变量的旧值,则避免后增量运算符,因为这个操作符创建了一个副本,因此性能损失很小。,java,Java,我想知道Java是否以同样的方式执行此操作,在这种情况下,for循环语句也应该优先使用前缀运算符,这些语句可能不适合for-each或lambda-forEach语句 Java规范说明§15.14.2: 后缀增量表达式的值是变量的值 之前 将存储新值 那么,在操作过程中是否有任何时候创建的新对象?因为我们返回的内容与递增的变量不同。是的,有。这个方法可以解释: int iplusplus(int i){ //this is just an example. in real java, this

我想知道Java是否以同样的方式执行此操作,在这种情况下,for循环语句也应该优先使用前缀运算符,这些语句可能不适合for-each或lambda-forEach语句

Java规范说明§15.14.2:

后缀增量表达式的值是变量的值 之前 将存储新值


那么,在操作过程中是否有任何时候创建的新对象?因为我们返回的内容与递增的变量不同。

是的,有。这个方法可以解释:

int iplusplus(int i){ //this is just an example. in real java, this would be a copy of i
  int old = i; //this is the copy that might be unneeded
  i = i+1;     //this is the actual increment
  return old; 
}
old是复制的值。如果只想增加i,++i更短:

int plusplusi(int i){
  return i+1;
}

如前所述,此方法不同,因为参数i将是一个副本,并且您不会更改调用代码中变量的值。

您是在基本值上使用运算符还是在数字引用类型值上使用运算符?是的,在后缀增量之后,内存中有两个对象-新值和旧值。旧值是表达式的结果。一般来说,这些微优化问题在Java中是没有意义的,因为JVM中有运行时优化。是的,在搜索时没有看到这个问题,如果已经问过