Are the j variable and obj reference created for every loop iteration or they are created once and then only reassigned the values?
Every time you loop, a new int is created but obj is only a reference to an existing object so that does not trigger an object creation. In any case, it is very likely that the JVM will optimise that for you.
Is there any perfomance benefit of putting ++i instead of i++ as a single instruction to increment the value?
Most likely nothing noticeable, and once again, the JVM will probably change your code anyway.
Bottom line: use whatever is more readable and limits the scope of the variables to where they are used.
Actually, the JVM will probably change your code to this, because you don't use the local variables in your loop:
Object[] objs = new Object[5];
//for (int i = 0; i < 5; ++i) {
// int j = i + 1;
// Object obj = objs[i];
//}
++iori++) only matters when you put them into an assignment (there is no performance difference though).