Java如何区分字符是全角还是半角?

3

我有这些代码,变量名称相同,唯一的区别是一个类型是全角,另一个是半角。我很惊讶Java支持使用全角字符作为变量名,我想知道Java是如何区分这两个字符的。

public class Main {

    public static void main(String[] args) {
        int[] x = { 1, 2, 3 };
        int[] x = { 1, 2, 3 };
        int[] y = { 4, 5, 6 };
        int[] y = { 4, 5, 6 };
        int[] z = new int[x.length];
        int[] z = new int[x.length];
        for (int i = 0; i < z.length; i++) {
            z[i] = x[i] + y[i];
            z[i] = x[i] + y[i];
        }
        System.out.println(z);
        System.out.println(z);
    }
}

4
它们是不同的字符。为了将它们视为相同字符,Java需要进行特殊处理,而不是反过来。 - Mat
Java 语言规范:3.8. 标识符:“字母和数字可以来自于整个 Unicode 字符集,...在忽略可忽略字符后,仅当标识符中每个字母或数字具有相同的 Unicode 字符时,两个标识符才相同。 - user85421
1
它们对我来说看起来足够不同。如果想要一个真正的挑战,可以使用希腊或西里尔字母作为变量名,例如 ϳjj - Mr Lister
3个回答

4
Java支持源代码中的Unicode,因此u'\uff58')与xu'x')有很大的区别。
本质上是不同的字符,就像有int[] aint[] b一样。
但是为了可读性,这是一个巨大的问题。即使是两个不同的变量,另一个用户很容易混淆这些名称。在源代码中尽可能使用基本的拉丁字母及其简单形式更好。

@John3136 是啊,哈哈,我也以同样的方式感到困惑了!!想象一下一个实习生因此而生气... #小心 - buræquete
如果我仔细看的话,我的浏览器似乎在渲染它们时略有不同 - 几乎像一个大写字母和一个小写字母?不过我不是100%确定... - John3136

2
从Java教程中学习Java语言(The Java Tutorials trail Learning the Java Language)的基础课(lesson Language Basics)中,主题为Variables,原始回答是这样的:

变量名区分大小写。一个变量的名称可以是任何合法的标识符——以字母开头、美元符号"$"或下划线字符"_"开头的Unicode字母和数字序列,长度无限制。

因此,在Java代码中,您甚至可以用克林贡语(Klingon)编写变量名。

为了帝国的荣耀!(https://dadap.github.io/pIqaD-tools/universal-transliterator/?xifan=woz%20baxvad) - buræquete

1

我猜你的源代码是用UTF-8(或其他“扩展”字符集)编码的,所以x和x的代码是不同的(计算机不在意字符的图形表示,而是内部代码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接