Java

Javaでif (a == 1 && a‬ == 2 && a‬‬ == 3)でtrueを出力(見えない識別子編)

Java でもa == 1 && a == 2 && a == 3でtrueって出力させたいに対するシンプルかつインチキなアンサー

public class AmazingEqualEqualOperator {
    public static void main(String[] args) {
        int a=1,a=2,a‬‬=3;

        if (a == 1 && a == 2 && a‬‬ == 3) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}

目に見えないが変数に使える文字がある。

ここでは 双方向テキストで用いられる制御文字 U+202C Pop directional formatting (PDF) を用いている。つまり、int a と a¥u202C と a¥u202C¥u202C の3種類の見た目が同じ変数を使い分けているだけ。

Character.html#isJavaIdentifierStart(char)
Character.html#isJavaIdentifierPart(char)
を用いることで、Javaの識別子の先頭に用いれる文字か、Javaの識別子の2文字目移行に用いれる文字かを判別することができる。