char + int 给出意想不到的结果
char + int gives unexpected result
我需要打印'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 等...
class 是 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 编译器将用 StringBuilder
替换字符串总和 (+
) 但 char+int
会 return 和 int
(并且 int
不是 String
)。
获取有关 char + int
returning 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 的效果更小。
我需要打印'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 等...
class 是 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 编译器将用 StringBuilder
替换字符串总和 (+
) 但 char+int
会 return 和 int
(并且 int
不是 String
)。
获取有关 char + int
returning 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 的效果更小。