Java中以_命名的字符串声明

时间:2018-09-07 12:08:36

标签: java

我有和平的代码来执行字符串的连接:-

String _‎ = "Hello ";
String _‏ = "World";
String _‎‏ = " !!";
System.out.println(_‎‏+_‎‏+_‎‏+_‎‏+_‎+_‏+_‎‏);

代码输出为:-

!! !! !! !!Hello World !!

我有几个问题:-

  1. 我们如何声明相同的命名变量(_)
  2. 如何计算输出

2 个答案:

答案 0 :(得分:11)

这只是一个愚蠢的花招:

三个下划线都是不同的字符/字符串,但在人眼中看起来是相同的。

如果您将值打印为字节数组

System.out.println(Arrays.toString("_‎".getBytes()));
System.out.println(Arrays.toString("_‏".getBytes()));
System.out.println(Arrays.toString("_‎‏".getBytes()));

您将获得输出:

[95, -30, -128, -114]
[95, -30, -128, -113]
[95, -30, -128, -114, -30, -128, -113]

为此,您发布的代码等效于以下内容:

String a = "Hello ";
String b = "World";
String c = " !!";
System.out.println(c+c+c+c+a+b+c);

答案 1 :(得分:0)

严格禁止从Java 9下划线开始(请参见Java 9 documentation

  

下划线字符不是合法名称。

     

如果您使用下划线字符(“ _”)作为标识符,则您的来源   代码无法再编译。

我试图运行它并出现错误。

  

(在以后的发行版中可能不支持使用'_'作为标识符   Java SE 8)

从现在开始不要使用下划线。

很显然,如果他们说不使用下划线,那么这背后有一些原因。