The academic debate is kinda interesting.

So I tested with the following, and ran javap -c on the output class file.

public void main(String... args) {
    String foo = "test";
    System.out.println(foo);
    Color col = Color.BLACK;
    System.out.println(col);
}

Bizarrely enough, the compiler generates bytecode that uses 2 separate stack offsets for the two variables. I didn't realize java's compiler was quite this stupid (I knew it was dumb, but really, come on?). I would have hopes it would have used the parse tree to work out that 'foo' was no longer used and it could reuse the stack offset. Will go and rewrite it to use a bloody for loop now.