Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何i=i++;返回10,执行k=i++;i的值返回11,其中i=10,k=0?_Java - Fatal编程技术网

Java 如何i=i++;返回10,执行k=i++;i的值返回11,其中i=10,k=0?

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中我也应该

我想知道当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中我也应该得到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

  • i++
    被评估;结果是10(记住,这是一个后期增量!)
  • i+1
    存储在
    i
    中,它短暂变为11(但没有人“看到”它,因为它被覆盖)
  • 增量前的评估结果,即10,被写回
    i
当您对
k
进行赋值时,不会重复写入
i

  • i++
    被评估;结果是10
  • i+1
    存储在
    i
    中,该值变为11,并保持不变
  • 评估结果(即10)写入
    k
    ,该值变为10

表达式
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在这里根本不重要。指定重新打开,以便可以将其作为副本关闭。