从整数到字符的隐式类型转换在Java中是如何工作的(Java基础)

从整数到字符的隐式类型转换在Java中是如何工作的(Java基础),java,android,Java,Android,在这个基本的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

在这个基本的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
i
转换为
String
。我认为任何需要字符串类型参数的函数都会在java中自动进行这种转换(与C不同)。但是,如果我在Android中尝试此功能
Toast.makeText(getApplicationContext(),i,Toast.LENGTH_SHORT).show()

如果扩展活动类中的
i
声明为
int
,则应用程序在启动时崩溃。那么这种转换在Java中是如何工作的呢?

它不是隐式转换。
pintln()
由许多数据类型组成:

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

在您的例子中,
makeText()
不是。

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

,以理解JAVA中的类型转换:

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

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

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

对不起,我的意思是说
String
System.println((char)i)
显示一个黑桃,所以我猜它显示的字符相当于ASCII数字5,不是吗?要点是,该函数必须设计为专门将任何给定类型的参数转换为所需类型的参数?它不转换任何内容。该类对于所有支持的数据类型都有一个合适的方法,并选择了合适的实现。如果你看我答案中的链接,你就会明白。好的,谢谢。println有多个版本,每个版本都将参数转换为字符串。这是正确的吗?但是,如果参数类似于“value=“+i”,那么在这种情况下,我输入的整数不是字符串吗?这是如何工作的?是
“value=“+i
使用隐式转换。谢谢,但我现在确信println()不执行数据转换。请参阅@rocketboy答案中的链接