【问题标题】:Printing Octal characters in java using escape sequences使用转义序列在java中打印八进制字符
【发布时间】:2015-05-29 06:59:48
【问题描述】:

请解释下面的代码

public class Example{
   public static void main(String[] args)
   {
      int i[]={9};
       System.out.println("\700");
   }
}

请不要说八进制值应该小于 377。我已经知道了,但是当我运行上述程序时,我得到的输出为 80。我想知道为什么会这样?

请给出清楚的解释。谢谢

【问题讨论】:

  • "\700" == "\70" + "0" == "8" + "0" == "80".
  • 感谢@系统发育

标签: java octal


【解决方案1】:

基本上,这里有两个字符:'\70''0'

八进制的转义序列是documented in the JLS

OctalEscape:
\ OctalDigit 
\ OctalDigit OctalDigit 
\ ZeroToThree OctalDigit OctalDigit 

最后一个不适用于您的情况,因为“7”不在 ZeroToThree 中,但“7”和“0”都是八进制数字,因此它与第二个模式匹配。

所以,现在我们只需要知道为什么 '\70' 是 '8'... 这是因为八进制 70 是十进制 56 或十六进制 38,即 UTF-16 code unit for '8'

【讨论】:

  • 只是一个小小的挑剔,乔恩,我会说它不是 UTF-16 代码点而不是 Unicode 代码点。 UTF-16 只是 Unicode 码位的一种编码方式。
  • @paxdiablo:我的意思是 UTF-16 代码单元,实际上(在答案中已修复) - 它比 Unicode 代码点更相关,因为 char 是 UTF-16 代码单元。 (特别是,字符串应被视为 UTF-16 代码单元的序列,例如 charAtlength 等。代码点可能比代码单元少...)
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2018-04-04
  • 1970-01-01
  • 2016-08-15
  • 2016-07-20
相关资源
最近更新 更多