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 右边的

连接