Kodun görüntülenme şeklini değiştiren görünmez karakterler var. Intellij'de bunlar, kodu ""
Unicode kaçışlarıyla değiştiren boş bir dizeye ( ) kopyalayıp yapıştırarak, etkilerini kaldırarak ve derleyicinin gördüğü sırayı ortaya çıkararak bulunabilir.
İşte bu kopyala-yapıştırın çıktısı:
"class M\u202E{public static void main(String[]a\u202D){System.out.print(new char[]\n"+
"{'H','e','l','l','o',' ','W','o','r','l','d','!'});}} "
Kaynak kod karakterleri bu sırayla saklanır ve derleyici bu sıraya göre davranır, ancak farklı şekilde görüntülenir.
Not \u202E
tüm karakterlerin sağdan sola-görüntülenecek zorunda kalan bir blok başlayarak sağdan sola geçersiz kılma olan karakteri, ve \u202D
bir soldan-sağa geçersiz kılma olduğunu, iç içe geçmiş bir blok nerede tüm başlangıç karakterler soldan sağa doğru zorlanarak ilk geçersiz kılmayı geçersiz kılar.
Ergo, orijinal kodu class M
görüntülediğinde normal olarak görüntülenir, ancak \u202E
her şeyin görüntülenme sırasını oradan 'e \u202D
tersine çevirir, bu da her şeyi tekrar tersine çevirir. (Biçimsel \u202D
olarak, satır sonlandırıcıdan her şeye bir kez \u202D
ve iki kez tersine çevrilmiş metnin geri kalanı nedeniyle iki kez tersine çevrilir \u202E
, bu nedenle bu metin satır yerine satırın ortasında görünür.) Sonraki satırın yönü, hat sonlandırıcısı nedeniyle birincisinden bağımsız olarak ele alınır, bu nedenle {'H','e','l','l','o',' ','W','o','r','l','d','!'});}}
normal olarak görüntülenir.
Tam (son derece karmaşık, düzinelerce sayfa uzunluğunda) Unicode çift yönlü algoritma için bkz. Unicode Standart Ek # 9 .