java中八进制数和十六进制数问题

public class Test01
{
public static void main(String[] args)
{

int a=12;
int b=012;
int c=0x12;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}

}
为什么输出结果都是十进制数而不是八进制数、十六进制数呢?
中间发生了什么变化吗?

默认是十进制。 System.out.printf("%x\n",x);//按16进制输出 System.out.printf("%o\n",x);//按8进制输出

int c=0x12;
这里是给编译器看的,告诉编译器0x12是指十六进制,也就是十进制的18。
也就是说
int c=0x12;

int c=18;
编译器生成的代码是等价的。
println并不能知道你在源代码阶段怎么给一个整数赋值,用的什么格式。它只能看到那个整数编译器编译后运行后的值。