class Info<T>{
private T var; public T getVar() {
return var;
} public void setVar(T var) {
this.var = var;
}
}
public class GenericsDemo13 {
public static void main(String[] args){
Info<String> i=new Info<String>();
i.setVar("AAAAA");
fun(i);
}
public static  void fun(Info<?> temp){
System.out.println("内容:"+temp);
}
}
为什么这个结果打印出来是个地址,而不是AAA呢?

解决方案 »

  1.   


    class Info<T> {
    private T var; public T getVar() {
    return var;
    } public void setVar(T var) {
    this.var = var;
    }
    public String toString(){
    return var.toString();
    }
    }
      

  2.   

    你得复写toString 不然打印的是对象
      

  3.   

    一个默认打印为Info的toString方法,Info没有覆盖那么就会调用Object的了    public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
      

  4.   

    “每一个基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法就会被调用”仔细品一品这句话,当你System.out.println(obj)的时候,其实隐式的调用了Obj.toString()方法。
      

  5.   

         我是菜鸟,说错了大家别骂我啊。你用的是自定义类。打印出来的temp是一个对象。怎么能打印出来AAA呢?因为temp是对象,所以打印出来的是个地址。想打印出值来得用temp.getVar()吧。。
      

  6.   

    这个也可以,通过打印调用toString(),如何toString()方法返回var的值。。