字符串与java中的基元的连接

时间:2015-05-20 02:59:51

标签: java string variables concatenation primitive

我刚刚开始学习Java中的Basics,并且正在测试通过连接原始变量来初始化字符串变量。

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);
    }
}

在这段代码中,我的目标是创建一个输出字符串:

H3110 w0r1d 2.0 true

然而,当我运行它时输出为:77 w0r1d 2.0 true

意外的结果是77,其余的都很好。即使我假设数字变量会被添加,它也只会是5个。变量lchar也显然是"吸收"进入数字。

77来自哪里以及l在l中发生了什么?

编辑:目标是在连接中使用尽可能多的原始变量。

Edit2:感谢所有有用的答案。

4 个答案:

答案 0 :(得分:3)

'H'的ASCII / Unicode值为72.从左到右处理添加内容,因此lchar + lbyte'H' + (byte) 3,等于72 + 3

如果其中一个操作数是字符串,则只能从+获得字符串结果。直到最后连接lstring才会发生这种情况,这解释了为什么所有数字(和char)变量被加在一起得到77. lstring右边的所有内容都是逐个连接,每个转换为一个字符串,因为所有+ s的左手操作数都是该点的字符串。

快速解决方法是从""开始强制用字符串完成所有操作。

String lOutput = ""+lchar+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;

答案 1 :(得分:3)

77来自你添加字符时。添加字符时,它会添加它们的值,因为它们的行为类似于整数。另外,数字的其他变量可能已加在一起。 ' H' java中72 = 72 + 3 = 75和75 + 1 = 76,最后76 + 1 = 77。

要解决此问题,您可以将""在你构建字符串的开头。

修正:

myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class

答案 2 :(得分:2)

Java从左到右评估表达式,所以发生的事情是你告诉Java将char和byte一起添加,然后Java将获取字符的整数值(72)并添加整数值字节(3)到它。

所以你真正告诉Java的是:

String lOutput = (72+3+1+1+0)+" w0r1d"+2.0+' '+true;

当Java来到+" w0r1d"时,它会将第一部分转换为String并将它们连接起来,但在此之前你要添加+被定义为添加的类型,因此Java会将它们相加到77岁。

要获得所需的行为,您需要从String开始,因此这样做将按您的要求运行:

    String lOutput = String.valueOf(lchar)+lbyte+lshort+lint+llong+lstring+ldouble+' '+lbool;

答案 3 :(得分:0)

这是自动类型转换。在ASCI图表中,大写'H'的整数表示为72.首先,'H'从int升级为char,然后它与string权利相连接