Tuesday, October 8, 2013

Is the final variable really constant in Java?

My answer is no. Oh, it was a bold answer. Let's see why.

Constant is something that can not be changed. The final variable by definition is a variable that can be initialized once.

The difference is slight. If the variable can be initialized only once, how can we change it?

Let's think about objects. We can initialize a variable to the object. In fact, we initialize the variable to the address of the object in the main memory).

Recall how the objects are stored in Java. See the picture below.

In the variable name1 we store the address of the place in the main memory where the object is stored, which is 42 in the picture).

When we declare a variable as final and initialize it, we can not change the address after that, but we can change the object!

Let's look at an example.

Tuesday, October 1, 2013

Why does Java use the Unicode?

I like this description, so I quote it. It answers the question why java uses Unicode.

The Java programming language uses the Unicode character set for managing text.

A character set is simply an ordered list of characters, each corresponding to a particular numeric value.

Unicode is an international character set that contains letters, symbols, and ideograms for languages all over the world. Each character is represented as a 16-bit unsigned numeric value. Unicode, therefore, can support over 65,000 unique characters.

Only about half of those values have characters assigned to them at this point. The Unicode character set continues to be refined as characters from various languages are included.

Many programming languages still use the ASCII character set. ASCII stands for the American Standard Code for Information Interchange.

The 8-bit extended ASCII set is quite small, so the developers of Java opted to use Unicode in order to support international users.

However, ASCII is essentially a subset of Unicode, including corresponding numeric values, so programmers used to ASCII should have no problems with Unicode.

John Lewis. Java Software Solutions: Foundations of Program Design.