0

所以在这个基本的 Java 程序中,

public class HelloWorld{
    public void testFunc(){
        System.out.println("Class = "+this);
    }

    @Override
    public String toString(){
        return "TEST";
    }


    public static void main(String[] args){
        int i = 5;
        HelloWorld hw = new HelloWorld();
        System.out.println("Hello, World");
        hw.testFunc();
        System.out.println(i);
    }
}  

该行System.out.println(i);自动将 转换int iString. 我认为任何需要 String 类型参数的函数都会在 java 中自动进行这种转换(与 C 不同)。但是,如果我在扩展活动类中声明为的Android 中尝试此
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_SHORT).show();
操作,则应用程序会在启动时崩溃。那么这种转换在 Java 中是如何工作的呢?iint

4

3 回答 3

5

它不是隐式转换。被许多数据类型pintln()重载

public void println(int x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

而在你的情况下makeText()不是。

于 2013-08-14T05:14:10.403 回答
2

System.out.println(int)确实将 int 转换为 char,它使用 . 将 int 转换为 String String.valueOf(int)。尝试显式转换System.println((char)i),您会看到它打印出不同的结果,它将是 U+0005 Unicode 字符

于 2013-08-14T05:18:57.620 回答
1

要了解 JAVA 中的类型转换:请参阅

用 Java 编程语言编写的每个表达式都有一个类型,可以从表达式的结构以及表达式中提到的文字、变量和方法的类型推导出来。

但是,可以在表达式类型不合适的上下文中编写表达式。在某些情况下,这会导致编译时出错。 这适用于 Android Toast 示例。

在其他情况下,上下文可能能够接受与表达式类型相关的类型;为方便起见,Java 编程语言不要求程序员显式指示类型转换,而是执行从表达式类型到其周围上下文可接受的类型的隐式转换。 这适用于 System.out.println(i) 示例

于 2013-08-14T05:26:46.433 回答