【问题标题】:Why can two variables have the same name? [duplicate]为什么两个变量可以同名? [复制]
【发布时间】:2018-07-07 03:16:09
【问题描述】:

我执行了以下代码,没有出现任何错误,并且在输出中我看到了Success! 消息。你能解释一下这种奇怪的行为吗?

public class Main {

    public static void main(String[] args) {
        int р = 0;
        int p = 1;
        if(р == 0 && p == 1) {
            System.out.println("Success!");
        }

    }

You can check the online demo

【问题讨论】:

  • 他们的名字不同。当我尝试在浏览器上搜索“int p =”时,只找到第二个变量。第一个必须使用看起来像“p”的不同字符。
  • @Erwin 你读过这个问题吗?问题不在于р == 0 && p == 1 评估为真。它是关于两个似乎具有相同名称的变量。
  • 当您将该字母粘贴到 URL 地址字段中时,Google 会建议一些俄语单词。
  • 您可以将ideone demo添加到您的问题中以使其清楚
  • @ErwinBolwidt 我检查了你的帖子,你谈到在同一个if 的多个测试中使用相同的变量,你用多线程技术解决了它,另一方面我的帖子是根据 JonSkeet 的说法,关于一个变量的命名结果与 p 不同,你在我的帖子中看到任何线程吗?我没有看到我的帖子和你的帖子有任何对应关系。 ,我相信我的帖子显然不是重复的。我要求重新打开它。

标签: java


【解决方案1】:

两者都是不同的变量(但看起来很相似),你可以看到 UTF-16 是不同的

    int р = 0;
    int p = 1;
    if (р == 0 && p == 1) {
        System.out.println("Success!");
        System.out.println("p UTF-16 is " + (int) 'p');
        System.out.println("р UTF-16 is " + (int) 'р');
    }

输出

Success!
p UTF-16 is 112
р UTF-16 is 1088

【讨论】:

  • 你怎么解释这个?
  • @ziMtyth 我在我的 IDE 上检查了这个
  • 请注意,1088 不是 ASCII 值。 ASCII 最多只能达到 127。您正在查看的是 UTF-16 代码单元。
  • @Saravana 我不是说不行,我说你怎么解释?
  • @ziMtyth:不清楚你要解释什么。有两个不同的字符,它们的显示恰好非常相似。一个是小写的“p”,另一个是"cyrillic small letter ER"
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多