#疑問
最近コレクションを学習し、疑問に感じた点があったため、記事に起こしながら確認します。
#コレクション
Listを使うときに型引数を指定しない場合、格納された時点でObject型として処理される。
#理解できなかった謎処理
ListにString型変数入れたけど、Listを型指定してないからObject型になって、そのオブジェクトの文字列をprintlnで表示...?
#printlnの処理
printlnの引数に入れられたオブジェクトのvalueOfメソッドを呼び出して文字列を表示する。
<修正 2019/05/24>
println()の引数をStringクラスのstaticメソッドvalueOf()の引数に与え処理が行われる。
#toStringとvalueOfの違い
toStringメソッドはインスタンスの文字列を返す。
valueOfメソッドは引数で渡されたオブジェクトがnullでなければ、そのオブジェクトのtoStringメソッドを呼びだす。
#結局toString
valueOfも結局はそのオブジェクトの文字列を返している。
User.java
public class User{
private String name;
public User(String name){
this.name = name;
}
public String toString(){
return name;
}
}
Main.java
public class Main{
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add(new User("sample"));
System.out.println(list.get(0)); //sample
}
}
#結果
型安全、Overrideをより理解できた。
#参考
-
https://docs.oracle.com/javase/jp/7/api/java/lang/String.html
【String - Oracle Docs】