java 中的原语字符串连接
String Contatenation with primitives in java
我最近才开始学习 Java 的基础知识,并且正在测试通过连接原始变量来初始化字符串变量。
public class Main{
public static void main(String[] args){
byte lbyte = 3;
short lshort = 1;
int lint = 1;
long llong = 0;
float lfloat = 2.0f;
double ldouble = lfloat;
char lchar = 'H';
boolean lbool = true;
String lstring = " w0r1d ";
String lOutput = lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
System.out.println(lOutput);
}
}
在这段代码中,我的 objective 是创建一个将输出的字符串:
H3110 w0r1d 2.0 真
然而,当我 运行 它的输出是:77 w0r1d 2.0 true
出乎意料的结果是77,其他都还好。即使我假设会添加数字变量,它总共也只有 5 个。变量 lchar 显然也 "absorbed" 进入数字。
77是哪里来的,lchar中的H是怎么回事?
编辑:目标是在串联中使用尽可能多的原始变量。
Edit2:感谢所有有用的答案。
'H'
的 ASCII / Unicode 值是 72。加法是从左到右处理的,所以 lchar + lbyte
是 'H' + (byte) 3
,等于 72 + 3
。
如果其中一个操作数是字符串,您只会从 +
中得到一个字符串结果。直到你最终连接 lstring
才会发生这种情况,这解释了为什么将所有数值(和 char
)变量加在一起得到 77。lstring
右边的所有内容是一个接一个地连接起来,每个都转换成一个字符串,因为所有这些 +
的左手操作数此时都是字符串。
一个快速的解决方法是从 ""
开始强制所有事情都用字符串来完成。
String lOutput = ""+lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
77 是您添加字符时产生的。添加字符时,它会添加它们的值,因为它们就像整数一样。其他数字变量也可能加在一起。 'H' = 72 in java and 72 + 3 = 75 and 75 + 1 = 76 and finally 76 + 1 = 77.
要解决此问题,您可以在构建字符串的开头放置“”。
修复:
String lOutput = ""+lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
Java 从左到右评估表达式,所以发生的事情是你告诉 Java 将一个字符和一个字节加在一起,然后 Java 将取整数字符 (72) 的值并将字节 (3) 的整数值添加到它。
所以你真正告诉 Java 的是这样做:
String lOutput = (72+3+1+1+0)+" w0r1d"+2.0+' '+true;
当 Java 变成 +" w0r1d"
时,它会将第一部分转换为 String 并将它们连接起来,但在此之前,您要添加类型,其中 +
被定义为加法和因此 Java 将它们相加为 77。
要获得所需的行为,您需要从一个字符串开始,所以这样做会如您所愿:
String lOutput = String.valueOf(lchar)+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
这是自动类型 conversion.Look 在 ASCI 图表中大写 'H' 的整数表示是 72。首先 'H' 从 int
升级为 int
char
然后它与 string
右边的
连接
我最近才开始学习 Java 的基础知识,并且正在测试通过连接原始变量来初始化字符串变量。
public class Main{
public static void main(String[] args){
byte lbyte = 3;
short lshort = 1;
int lint = 1;
long llong = 0;
float lfloat = 2.0f;
double ldouble = lfloat;
char lchar = 'H';
boolean lbool = true;
String lstring = " w0r1d ";
String lOutput = lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
System.out.println(lOutput);
}
}
在这段代码中,我的 objective 是创建一个将输出的字符串:
H3110 w0r1d 2.0 真
然而,当我 运行 它的输出是:77 w0r1d 2.0 true
出乎意料的结果是77,其他都还好。即使我假设会添加数字变量,它总共也只有 5 个。变量 lchar 显然也 "absorbed" 进入数字。
77是哪里来的,lchar中的H是怎么回事?
编辑:目标是在串联中使用尽可能多的原始变量。
Edit2:感谢所有有用的答案。
'H'
的 ASCII / Unicode 值是 72。加法是从左到右处理的,所以 lchar + lbyte
是 'H' + (byte) 3
,等于 72 + 3
。
如果其中一个操作数是字符串,您只会从 +
中得到一个字符串结果。直到你最终连接 lstring
才会发生这种情况,这解释了为什么将所有数值(和 char
)变量加在一起得到 77。lstring
右边的所有内容是一个接一个地连接起来,每个都转换成一个字符串,因为所有这些 +
的左手操作数此时都是字符串。
一个快速的解决方法是从 ""
开始强制所有事情都用字符串来完成。
String lOutput = ""+lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
77 是您添加字符时产生的。添加字符时,它会添加它们的值,因为它们就像整数一样。其他数字变量也可能加在一起。 'H' = 72 in java and 72 + 3 = 75 and 75 + 1 = 76 and finally 76 + 1 = 77.
要解决此问题,您可以在构建字符串的开头放置“”。
修复:
String lOutput = ""+lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
Java 从左到右评估表达式,所以发生的事情是你告诉 Java 将一个字符和一个字节加在一起,然后 Java 将取整数字符 (72) 的值并将字节 (3) 的整数值添加到它。
所以你真正告诉 Java 的是这样做:
String lOutput = (72+3+1+1+0)+" w0r1d"+2.0+' '+true;
当 Java 变成 +" w0r1d"
时,它会将第一部分转换为 String 并将它们连接起来,但在此之前,您要添加类型,其中 +
被定义为加法和因此 Java 将它们相加为 77。
要获得所需的行为,您需要从一个字符串开始,所以这样做会如您所愿:
String lOutput = String.valueOf(lchar)+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;
这是自动类型 conversion.Look 在 ASCI 图表中大写 'H' 的整数表示是 72。首先 'H' 从 int
升级为 int
char
然后它与 string
右边的