有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么toString()不总是自动调用

那么为什么toString不总是被调用呢?这是一个使用Android API的示例

例如

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
        int position, long id) {
    Toast.makeText(this, adapterView, Toast.LENGTH_LONG).show();
}

不会编译。但是如果我把它改成

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
            int position, long id) {
    Toast.makeText(this, adapterView.toString(), Toast.LENGTH_LONG).show();
}

会的。实际的区别是什么


共 (6) 个答案

  1. # 1 楼答案

    还有这个

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view,
                int position, long id) {
        Toast.makeText(this, "" + adapterView, Toast.LENGTH_LONG).show();
    }
    

    将编译;)

  2. # 2 楼答案

    编译器插入toString()的唯一情况是字符串串联

  3. # 3 楼答案

    我不知道Android API,但AdapterView实际上不是CharSequence的子类,因此必须应用toString()

  4. # 4 楼答案

    你说的总是是什么意思toString()只是一个返回对象的String表示的方法。Toast.makeText需要一个String参数,但在第一种情况下,您提供了一个AdapterView类的对象。所以它不会编译:)

  5. # 5 楼答案

    我想是烤面包。makeTest的第二个参数的类型为String。然后尝试传递AdapterView类型的参数将不起作用。toString()永远不会自动调用,除非在连接字符串时(“+adapterView”也可以,但更难看)

  6. # 6 楼答案

    adapterView不是String

    编译器不会自动调用toString()来执行强制转换-这会稍微破坏类型安全性。例如,只有当存在+""时,编译器才会自动调用toString()