Created By: Geoffrey Challen
/ Updated: 2022-08-15

This lesson is all about nothing! It turns out, that in Java, nothing causes all kinds of problems. We have to be very careful with nothing. In fact, nothing may be the biggest flaw with the Java programming language! Let's find out why, and also continue to practice writing String algorithms.

Java's Nothing That Is (A Big Problem)

Java has a special value that is used to indicate that an object is uninitialized: null. Here's an example using Strings, the one object that we have been working with:

null is a literal that can be used to initialize any object. Note that variables of primitive types cannot be set to null:

However, arrays of primitive types are objects and so can be null:

The Billion Dollar Mistake

null seems harmless and maybe even kind of cute! But it has left a trail of damage and tears in its wake. In fact, famous computer scientist Tony Hoare, who is credited for inventing null as part of the programming language ALGOL, refers to it as his "billion dollar mistake". Let's look at why:

Demonstrate problems with null, and discuss NullPointerExceptions.

null has caused so many problems over the years, that newer variants of Java have made avoiding these problems a core design goal.

Safely Working with null

From this point forward we're going to try and keep null in the back of our minds. Always. Whenever we have a variable that could be null, we need to make sure that it isn't null before we do anything with it!

Fortunately there is a fairly straightforward pattern to this. Let's check it out:

Demonstrate how to check for null at the beginning of a function, and return an appropriate value.

Show how to complete the homework problem above. Feel free to cover multiple approaches!

More Practice With Strings

Now let's continue developing our algorithmic and String manipulation capabilities. Let's apply our skills to determining whether two Strings are anagrams. An anagram is created by rearrange the letters from one word to form another:

  • "restful" and "fluster" are anagrams
  • "evil" and "vile" are also anagrams

For our implementation we will not ignore whitespace and capitalization. Some anagrams do: for example, "New York Times" and "monkeys write" are anagrams, but the first string has two spaces while the second has only one. To us those would not be anagrams. When we are done, we can discuss how to make our approach more flexible.

Show how to implement anagram using just character counting, and without arrays or sorting. Point out that this is inefficient and how we could improve it in the future.

Note that there are better ways to implement this algorithm. Perhaps we'll return to it later and experiment with one or even two alternate approaches. That's part of what makes computer science so exciting! There is always more than one way to solve any problem...

Show how to complete the homework problem above. Feel free to cover multiple approaches!

Show how to complete the homework problem above. Feel free to cover multiple approaches!

More Practice

Need more practice? Head over to the practice page.