In Java we see lots of places where the final keyword can be used but its use is uncommon.
For example:
String str = \"abc\";
System.ou
You are really asking about two (at least) different cases:
final for local variablesfinal for methods/classesJon Skeet has already answered 2). About 1):
I don't think it makes a difference; for local variables, the compiler can deduce whether the variable is final or not (simply by checking whether it is assigned more than once). So if the compiler wanted to optimize variables that are only assigned once, it can do so no matter whether the variable is actually declared final or not.
final might make a difference for protected/public class fields; there it's very difficult for the compiler to find out if the field is being set more than once, as it could happen from a different class (which may not even have been loaded). But even then the JVM could use the technique Jon describes (optimize optimistically, revert if a class is loaded which does change the field).
In summary, I don't see any reason why it should help performance. So this kind of micro-optimization is unlikely to help. You could try benchmarking it to make sure, but I doubt it will make a difference.
Edit:
Actually, according to Timo Westkämper's answer, final can improve performance for class fields in some cases. I stand corrected.