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

whi*_*win 2 java android android-adapterview

那么为什么不总是调用toString?这是使用Android API的示例.

例如

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

不会编译.但是,如果我将其更改为

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

它会.实际差异是什么?

dav*_*vin 8

adapterView不是String.

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


Pet*_*lor 6

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


Pet*_*hev 5

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