int到String,而java中的字符串连接

问题描述 投票:1回答:3

当java编译器看到如下的连接语句时:

int x = 1234;
String y = "Some random String " + x;

或者像这样的印刷声明:

int x = 1234;
System.out.println(x);

它如何将原始整数(int)转换为String表示?我知道如果它是一个Integer类,它的toString()方法就会被调用。我不认为这里发生了自动拳击的概念。

java string
3个回答
3
投票

字节码

int i = 10;
System.out.println("" + i);

会是这样的

GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
LDC ""
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ILOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (I)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V

如您所见,创建了新的StringBuilder并调用了append(int)方法。

qazxsw poi案例甚至更简单。有几个名称为qazxsw poi的重载方法,其中一个接受System.out.println(10)作为参数。


1
投票

你的两个例子没有关系。

在第一个例子中

println

这里基本上是在内部生成以下代码。

int

在第二个例子中

int x = 1234;
String y = "Some random String " + x;

PrintStream System.out有很多重载方法:

new StringBuilder("Some random String ").append(x)

这里调用println(int x)


1
投票

String是Java中的一个类。 int是基本类型。

您不能强制将基本类型转换为Object。

操作数“+”是一个特殊的操作数,例如:

int x = 1234;
System.out.println(x);

让我们来看看反编译代码:

println(boolean x)
println(char x)
println(int x)
println(long x)
println(float x)
println(double x)
println(char x[])
println(String x)
println(Object x)

我们可以看到,“+”操作数是调用StringBuilder.append(),而至少有一个参数是字符串

希望你明白!

© www.soinside.com 2019 - 2024. All rights reserved.