【问题标题】:How does this pre increment on arrays work数组上的这种预增量如何工作
【发布时间】:2015-08-19 16:00:10
【问题描述】:
++frequency[2] ;

我以为没有初始化的数组的默认值是0。 Imo,这意味着评估 frequency[2] 为零,然后将其加 1 并将其分配给索引 2。 请任何人解释如何获得此代码的输出。在这件事上我真的很难受。

 public static void main(String ars[])
{

    int responses[] = {1,2,4,4};
   int freq[] = new int[5];
    for(int answer = 1;answer < responses.length;answer++){
        ++freq[responses[answer]];
    }
    for ( int rating = 1; rating < freq.length; rating++ )
         System.out.printf( "%6d%10d\n", rating, freq[ rating ] );

//输出

     1         0
     2         1
     3         0
     4         2

【问题讨论】:

  • 那么,你试试会发生什么?
  • 如果你相信Wikipedia,它会说,Java 没有未初始化的变量。没有显式初始化程序的类和对象的字段以及数组元素会自动使用其类型的默认值进行初始化(布尔值为 false,所有数值类型为 0,所有引用类型为 null)。 Java中的局部变量在被访问之前必须明确赋值,否则就是编译错误。

标签: java arrays


【解决方案1】:

是的,你是。

int[] frequency = new int[3];
System.out.println(frequency[2]);
System.out.println(++frequency[2]);
System.out.println(frequency[2]);

打印:

0
1
1

编辑:正如 lurker 所说的 How does this pre increment on arrays work,这个答案对 Java 有效,但可能不适用于其他语言。

【讨论】:

  • 但是这个演示并不能保证它。例如,可以让这段代码在 C 中以相同的方式执行,具体取决于内存的大小。 保证的是语言中关于变量初始化的政策。
  • 我回答了关于 Java 的问题,但是是的,最好在示例中指出这一点。
猜你喜欢
  • 2015-11-13
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2011-05-30
  • 1970-01-01
  • 2021-01-25
  • 2017-12-17
相关资源
最近更新 更多