Vivek,
In the second example, you have an int in go(7).
Java "knows" it is an int because it is just the number 7. It so happens that there is no go(int) method so the compiler gives you an error. But there *could* be so Java can't make assumptions. Or go(int) could be added after. The problem is that if go(int) existed, go(7) would call it. And Java doesn't want the method called to change on you later.
Whereas with byte b = 7, there's no ambiguity. You obviously mean for it to be a byte because it is an assignment.