解答編

01:public class Test {
02:
03:    public static void main(String[] args) throws Exception {
04:	System.out.println(add(10.0,20.0));
05:    	System.out.println(add("10.0","20"));
06:    	System.out.println(add(10,20));
07:    	System.out.println(add(10,20.0));
08: 	System.out.println(add(10.0,20));
09:    	System.out.println(add("10","20"));
10:    	
11:    }
12:    
13:    public static int add(int args1, int args2) {
14:    	System.out.println("int型");
15:    	int result = args1 + args2;
16:    	return result;
17:    }
18:    
19:    public static double add(double args1, double args2) {
20:    	System.out.println("double型");
21:    	double result = args1 + args2;
22:    	return result;
23:    }
24:    
25:    public static double add(String args1, String args2) {
26:    	System.out.println("String型");
27:    	double temp1 = Double.parseDouble(args1);
28:    	double temp2 = Double.parseDouble(args2);
29:    	double result = temp1 + temp2;
30:    	return result;
31:    }
32:
33:}

このプログラムですね。
わかりやすいように、行番号を振っておきました。
まず、4行目の
System.out.println(add(10.0,20.0));
が実行されます。まず、add(10.0,20.0)です。
型に注目すると、10.0や20.0はdouble型であるので19行目以下が実行されます。
まず、double型と表示されます。
引数より、args1に10.0がargs2に20.0が入るのでresultは30.0になり戻り値として30.0が返されます。
戻り値をそのまま表示するので30.0と表示されます。


次に、System.out.println(add("10.0","20"));が実行されます。同様にadd("10.0","20")が実行されれます。引数の型はString型なので25行目以下が実行されます。
まず、「String型」と表示され戻り値として30.0が返されます。よって、30.0と表示されます。


次に、System.out.println(add(10,20));が実行されます。同様にadd(10,20)が実行されます。引数の型はint型なので13行目いかが実行されます。
まず、「int型」と表示され戻り値として30が返されます。よって、30と表示されます。


次に、System.out.println(add(10,20.0));が実行されます。同様に先にadd(10,20.0)が実行されます。型に注目すると第一引数が10なのでint型、第二引数が20.0なのでdouble型となります。add(int,double)というメソッドは存在しないのでここで暗黙の型変換が行われます。10がdouble型に型変換されて10.0と解釈されます。よって、19行目以下が実行されます。
まず、「double型」と表示され戻り値として30.0が返されます。よって、30.0と表示されます。

次に、System.out.println(add(10.0,20));が実行されます。同様にadd(10.0,20)が実行されます。先の例と同様に暗黙の型変換が行われ、19行目以下が実行されます。
まず、「double型」と表示され戻り値として30.0が返されます。よって、30.0と表示されます。

次に、System.out.println(add("10","20"));が実行されます。同様に、add("10","20")が実行されます。引数は両方ともString型なので25行目以下が実行されます。
まず、「String型」と表示され戻り値の型はdouble型であるので、30.0が返されます。よって、30.0と表示されます。

終了です。


とここまで流れを追ってきましたが、表示される数字が小数点を含むものとそうでないものがあります。なぜ、小数点が表示されるのかというところを注意してみてください。