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 \u202Etü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 \u202Dbir 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 Mgörüntülediğinde normal olarak görüntülenir, ancak \u202Eher şeyin görüntülenme sırasını oradan 'e \u202Dtersine çevirir, bu da her şeyi tekrar tersine çevirir. (Biçimsel \u202Dolarak, satır sonlandırıcıdan her şeye bir kez \u202Dve 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 .