如何解决char + int 给出了意想不到的结果
我需要打印“H3110 w0r1d 2.0 true”作为输出。 下面是编写并获得输出为“3182 w0r1d 2.0 true”的代码。
public class HelloWorld {
public static void main (String[] args){
char c1= 'H';
int num1 = 3110;
char c2='w';
byte b=0;
char c3='r';
int y=1;
char c4='d';
float f = 2.0f;
boolean bool= true;
String s = c1+num1 + " " + c2+b+c3+y+c4 + " " + f + " " + bool;
System.out.println(s);
}
}
查询:如果我连接 H
和 3110
,它打印为 3182
。为什么会这样?
解决方法
除非至少有一个操作数是 +
类型,否则 String
运算符不使用字符串连接。忽略 +
运算符的其余部分,您基本上是在寻找“如果我将 char
和 int
加在一起会发生什么” - 答案是“char
被提升到 int
,并执行正常的整数加法”。 'H'
的提升值为 72(因为这是 'H' 的 UTF-16 数值),因此结果为 3182。
在您的情况下,最简单的解决方法是将 c1
的类型更改为 String
而不是 char
:
String c1 = "H";
然后将使用字符串连接而不是整数加法。
,您应该使用 Java 5 中引入的 StringBuilder
,它具有 .append()
和 char/int/long 等方法...
此类是 Java 中正确的字符串连接器,允许您通过其字符串表示连接任何原语(char/int/long ...)。
System.out.println(4+3+"s"); // will print "7s"
System.out.println(StringBuilder.append(4).append(3).append("s").toString()); // will print "43s"
正如@Zabuzard 所提到的,Java 编译器会将 String sum (+
) 替换为 StringBuilder
,但 char+int
确实返回 int
(而 int
不是不是 String
)。
获取有关 char + int
返回 int
的详细说明。
我建议你@JonSkeet 回答:)
public class Main {
public static void main(String[] args) {
char c1= 'H';
int num1 = 3110;
char c2='w';
byte b=0;
char c3='r';
int y=1;
char c4='d';
float f = 2.0f;
boolean bool= true;
String s = new StringBuilder()
.append(c1)
.append(num1)
.append(c2)
.append(b)
.append(c3)
.append(y)
.append(c4)
.append(f)
.append(bool)
.toString();
System.out.println(s);
}
}
,
这个问题的另一个解决方案可能是使用静态方法
String.valueOf(c1)
更好的方法是使用前面提到的 StringBuilder,但使用 String.valueOf 是另一种解决方案,它对代码的影响比使用 StringBuilder 小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。