Java程序中的数组奇怪的行为

Ume*_*cha 4 java

我遇到了这个Java程序,它以意想不到的方式运行.以下程序计算int数组中元素对之间的差异.

import java.util.*;

public class SetTest
{
       public static void main(String[] args)
       {
            int vals[] = {786,678,567,456,
                          345,234,123,012};

            Set<Integer> diffs = new HashSet<Integer>();

            for(int i=0; i < vals.length ; i++)
                for(int j = i; j < vals.length; j++)
                       diffs.add(vals[i] - vals[j]);

            System.out.print(diffs.size());
       }
}
Run Code Online (Sandbox Code Playgroud)

如果我们分析它似乎设置大小应该是8,这是数组的大小.但是,如果你运行这个程序,它打印14.发生了什么?任何的想法?

先感谢您.

答:这种奇怪的行为发生是因为如果我们将数组改为12则数组中的012变为八进制,然后按预期打印8.

课程:永远不要用零填充整数文字.

Pet*_*Mmm 11

您是否注意到012(八进制)是10(十进制)?