Java 如何i=i++;返回10,执行k=i++;i的值返回11,其中i=10,k=0?
我想知道当I=10和k=0时,以及当我试图打印I的值时,当我这样做时:Java 如何i=i++;返回10,执行k=i++;i的值返回11,其中i=10,k=0?,java,Java,我想知道当I=10和k=0时,以及当我试图打印I的值时,当我这样做时: public class Case1{ public static void main(String[] a){ int i = 10; i = i++; System.out.println(i); } } 案例1:i=i++ 它正在打印i=10,其中 案例2:k=i++ 它打印i=11 我想知道到底是怎么做的?因为在这两种情况下,i++都在做,然后我打印i的值 如果在第二种情况下,我得到i=11;那么在案例1中我也应该
public class Case1{
public static void main(String[] a){
int i = 10;
i = i++;
System.out.println(i);
}
}
案例1:i=i++
它正在打印i=10,其中
案例2:k=i++
它打印i=11
我想知道到底是怎么做的?因为在这两种情况下,i++都在做,然后我打印i的值
如果在第二种情况下,我得到i=11;那么在案例1中我也应该得到11。请有人给我解释一下这个过程
代码如下所示:
public class Case1{
public static void main(String[] a){
int i = 10;
i = i++;
System.out.println(i);
}
}
它给出了ans:10
及
这里的ans是11
现在请向我解释两种情况,例如第一个程序i=10和第二个程序11中的情况。在第一种情况下,
++
的副作用在执行赋值之前应用于i
:
被评估;结果是10(记住,这是一个后期增量!)i++
存储在i+1
中,它短暂变为11(但没有人“看到”它,因为它被覆盖)i
- 增量前的评估结果,即10,被写回
i
k
进行赋值时,不会重复写入i
:
被评估;结果是10i++
存储在i+1
中,该值变为11,并保持不变i
- 评估结果(即10)写入
,该值变为10k
i++
将i
的值递增1,并在递增之前返回i
的值。因此,在案例1中,i++
将i
的值更改为11
,但返回值10
,然后将其分配回i
,从而有效地撤消增量
案例2不同,因为您将
i++
的结果分配给不同的变量,因此增量不会撤消k
保存值10
,i
保存值11
,您的第一个代码与此类似:
public class Case1{
public static void main(String[] a){
int i = 10; // i becomes 10
int tmp = i; // tmp becomes 10
i = i + 1; // i becomes 11
i = tmp; // i becomes tmp's value, which is 10
System.out.println(i); // The result is 10
}
}
第二个代码是:
public class Case1{
public static void main(String[] a){
int i = 10; // i becomes 10
int k = 0; // k becomes 0
int tmp = i; // tmp becomes 10
i = i + 1; // i becomes 11
k = tmp; // k becomes tmp's value, which is 10
System.out.println(i); // The result is 11 as you print the i.
// If k was printed, it would be 10 like in example 1.
}
}
好的,伙计,首先我写了下面的示例程序,请检查一下,然后解释一下 导入java.util.*; 公共类堆栈测试{
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int num=sc.nextInt();
int i=10;
int k;
switch(num){
case 1:
i=i++;
System.out.println("case1:"+i);
break;
case 2:
k=i++;
System.out.println("case2:"+i);
break;
default:break;
}
}
}
这里你怀疑的是第一种情况,你可能通过num是1,结果是:10,
第二种情况是u可能通过的数值是2,结果是:11对。
好的,我会澄清这一点。第一种情况是,所发生的情况意味着“i”值不会增加,只是将10分配给相同的内存分配变量,如“i”
但在第二种情况下,递增的结果“i”值被分配给其他一些新变量,如k,这里的结果是将分配给k并打印11
看到这一点,你可以理解并把这两种情况都说出来
导入java.util.*;
公共类StackTest1{
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int num=sc.nextInt();
int i=10;
int k;
switch(num){
case 1:
k=i++;
System.out.println("case1:"+i);
break;
case 2:
k=i++;
System.out.println("case2:"+i);
break;
default:break;
}
}
}
我想这件衣服能让你满意。谢谢你,如果你给我们看编码,我们会帮你简单得多。你能给我们看编码是如何递增然后显示的吗?我想这是一个增量后的问题,而不是增量前的问题。也许可以尝试
i=++i
而不是i=i++
?您将1
添加到i
中两次,并使用后期增量<代码>k在这里根本不重要。指定重新打开,以便可以将其作为副本关闭。