What does an integer that has zero in front of it mean and how can I print it?

♀尐吖头ヾ 提交于 2019-12-17 04:35:33

问题


class test{
  public static void main(String args[]){
     int a = 011;
     System.out.println(a);
  }
}

Why I am getting 9 as output instead of 011?

How can I get 011 as output?


回答1:


The JLS 3.10.1 describes 4 ways to define integers.

An integer literal may be expressed in decimal (base 10), hexadecimal (base 16), octal (base 8), or binary (base 2).

An octal numeral consists of a digit 0 followed by one or more of the digits 0 through 7 ...

A decimal numeral is either the single digit 0, representing the integer zero, or consists of an digit from 1 to 9 optionally followed by one or more digits from 0 to 9 ...

In summary if your integer literal (i.e. 011) starts with a 0, then java will assume it's an octal notation.

Solutions:

If you want your integer to hold the value 11, then don't be fancy, just assign 11. After all, the notation doesn't change anything to the value. I mean, from a mathematical point of view 11 = 011 = 11,0.

int a = 11;

The formatting only matters when you print it (or when you convert your int to a String).

String with3digits = String.format("%03d", a);
System.out.println(with3digits);

The formatter "%03d" is used to add leading zeroes.

Alternatively, you could do it in 1 line, using the printf method.

System.out.printf("%03d", a);



回答2:


A numeric literal that starts with 0 is parsed as an octal number (i.e. radix 8). 011 is 9 in octal.




回答3:


The 011 is being interpreted as an octal number. This means it's in base 8. See also this SO post. From the accepted answer by Stuart Cook:

In Java and several other languages, an integer literal beginning with 0 is interpreted as an octal (base 8) quantity.

Digits in Base 10:
100s, 10s, 1s

Digits in Base 8:
64s, 8s, 1s

So the 011 is interpreted as 8+1=9



来源:https://stackoverflow.com/questions/35521278/what-does-an-integer-that-has-zero-in-front-of-it-mean-and-how-can-i-print-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!