如何在java中设置八进制的值?

我正在尝试编写以下代码。但它给了我错误,请帮助我。

int six=06; int seven=07; int abc=018; int nine=011; System.out.println("Octal 011 ="+nine); System.out.println("octal O18 =" + abc); 

为什么我不能给018和019变量。我可以给变量值020和021。 为什么会这样? 这背后的原因请告诉我。
我得到了以下错误

  integer number too large: 018 int eight=018; 

八进制是base-8数字系统,所以它意味着数字可以是0到7,你不能在八进制数系统中使用数字8(和9)。

为什么我不能给018和019变量。

因为前缀为0的整数文字被视为八进制,而’8’和’9’不是有效的八进制数字。

从JLS第3.10.1节开始 :

八进制数字由ASCII数字0后跟一个或多个散布有下划线的ASCII数字0到7组成,并且可以表示正整数,零整数或负整数。

试图在八进制数中使用’8’就像试图在hex中使用’G’…它很简单,不是该基数中使用的符号集的一部分。

 // Decimal declaration and possible chars are [0-9] int decimal = 495; // HexaDecimal declaration starts with 0X or 0x and possible chars are [0-9A-Fa-f] int hexa = 0X1EF; // Octal declaration starts with 0 and possible chars are [0-7] int octal = 0757; // Binary representation starts with 0B or 0b and possible chars are [0-1] int binary = 0b111101111; 

如果数字是字符串格式,那么您可以使用下面的方法将其转换为int

 String text = "0b111101111"; int value = text.toLowerCase().startsWith("0b") ? Integer.parseInt(text.substring(2), 2) : Integer.decode(text); 

八进制数(基数为8)只能使用以下数字: 01234567 。 与十进制数字(基数10)相同的方式只能使用0123456789

所以在八进制表示中, 17 + 120

前缀0表示八进制(8基)(数字0-7)。

 public class MainClass{ public static void main(String[] argv){ int intValue = 034; // 28 in decimal int six = 06; // Equal to decimal 6 int seven = 07; // Equal to decimal 7 int eight = 010; // Equal to decimal 8 int nine = 011; // Equal to decimal 9 System.out.println("Octal 010 = " + eight); } } 

为什么我不能给018和019变量。我可以给变量值020和021。

前导零表示八进制文字。 但是, 89不是有效的八进制数字。 这使得018019无效。

因为它是八进制,所以八进制数有8位数,从07包括07 。 出于同样的原因, 12将是无效的二进制数。

你需要至少9基数才能得到1819的正常小数基数。

当整数文字在Java中以0开头时,它被假定为八进制表示法。 数字89在八进制中是非法的 – 数字的范围仅在0到7之间。