Home » Java » Core Java » Java Hidden code

About Peter Lawrey

Java Hidden code

Sometime ago I came across the issue of invisible characters in Strings. These can really cause confusion because they are invisible.

    String a = "Hello\u200e";
    String b = "Hello\u200f";
    System.out.println('\'' + a + "' and '" + b + "' are length "
                     + a.length() + " and " + b.length() 
                     + ", equals() is " + a.equals(b));

prints

'Hello?' and 'Hello?' are length 6 and 6, equals() is false

Invisible identifiers

Imagine my reaction to discovering you can use invisible characters in identifiers in Java :P. These characters cannot appear at the start of identifiers in Java but can be anywhere else.

    System.out.println("String _\u200e = \"Hello \";");
    System.out.println("String _\u200f = \"World\";");
    System.out.println("String _\u200e\u200f = \" !!\";");
    System.out.println("System.out.println(_\u200e+_\u200f+_\u200e\u200f);");

prints

String _? = "Hello ";
String _? = "World";
String _?? = " !!";
System.out.println(_?+_?+_??);

which when run prints

Hello World !!

So we have three identifiers which all appear the same because they have different invisible characters in their names !!

Amazingly this code compiles, runs and prints all the characters which can be in an identifier but not start them. The code contains \u202e which really messes with the display of the code.

    for (char c??h = 0; c??h < Character.MAX_VALUE; c??h++)
        if (Character.isJavaIdentifierPart(c??h) && !Character.isJavaIdentifierStart(c??h))
            System.out.printf("%04x <%s>%n", (int) c??h, "" + c??h);

Reference: Hidden code from our JCG partner Peter Lawrey at the Vanilla Java blog.

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

and many more ....

 

Leave a Reply

Your email address will not be published. Required fields are marked *

*


three + 9 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Do you want to know how to develop your skillset and become a ...

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!
Get ready to Rock!
To download the books, please verify your email address by following the instructions found on the email we just sent you.

THANK YOU!

Close