The Unicode values are hexadecimal. m1() therefore returns 1 and m3(c) returns 3. Subsequently you have the print statement. Here the addition of the two values is preceded by an (empty) String, this results in implicitly calling the toString() for both the results which is followed by their concatenation with the overloaded + operator. Hence the result 13.
Suppose you had:
Then the addition of m1()+m3(c) would take place first, thereby obtaining (your) result 4.