黑马程序员技术交流社区

标题: 在System.out.println里面使用加减乘除 [打印本页]

作者: 黑马-张洋    时间: 2013-2-26 15:36
标题: 在System.out.println里面使用加减乘除
  1. public class test {


  2.         public static void main(String args[]) {
  3.                   int x = 5;
  4.                         int y = 2;
  5.                         System.out.println(x+ y + "k");
  6.                         System.out.println(x+" "+ y + "k");
  7.         }

  8. }
复制代码
打印结果:
7k
5 2k


那要是我就要打印52k呢?
我记得曾经我知道过,但是我已经忘了,也不知道到哪去找了

作者: lzw123451    时间: 2013-2-26 15:39
那个双引号里面有空格?
作者: 李挺    时间: 2013-2-26 15:40
本帖最后由 李挺 于 2013-2-26 15:51 编辑

加减乘除运算的结合性是从左到右的
当2个不同类型进行运算时会进行类型提升
X+“”会将结果转化个字符串
这就导致了52K的现象
如果你就是要打印52k
System.out.println(""+5+2+"k");
作者: 陈圳    时间: 2013-2-26 15:41
int x=5;
System.out.println(x+" "+ y + "k");//x+""就将x转换为字符串了.如果x+y就会先运算.
System.out.println("")所有运算表达式都会通过+""转换成字符串然后输出.
作者: 黑马-张洋    时间: 2013-2-26 15:47
李志卫 发表于 2013-2-26 15:39
那个双引号里面有空格?

是啊,没空格怎么打出的来
作者: 黑马-张洋    时间: 2013-2-26 15:49
李挺 发表于 2013-2-26 15:40
加减乘除运算的结合性是从左到右的
当2个不同类型进行运算时会进行转化
X+“”会将结果转化个字符串

哦。。原来是这样啊。原来写c的时候老是有这句话叫我们+”“,我当时只能死记硬背,原来是这样啊。。
谢谢了
System.out.println(5+""+2+"k");
这样也可以
作者: Benwolf0818    时间: 2013-2-26 15:50
你可以System.out.println(""+x+y+"k");
作者: 黑马-张洋    时间: 2013-2-26 15:50
陈圳 发表于 2013-2-26 15:41
int x=5;
System.out.println(x+" "+ y + "k");//x+""就将x转换为字符串了.如果x+y就会先运算.
System.out. ...

谢谢你了。明白了
作者: lzw123451    时间: 2013-2-26 16:02
黑马-张洋 发表于 2013-2-26 15:47
是啊,没空格怎么打出的来

你把“”之间的空格去掉 那个5 2k中间的空格不就没有了,变成52k了吗
作者: 黑马-张洋    时间: 2013-2-26 16:08
李志卫 发表于 2013-2-26 16:02
你把“”之间的空格去掉 那个5 2k中间的空格不就没有了,变成52k了吗

晕,我不熟悉原来+”“就可以转成字符串
作者: 王宝生    时间: 2013-2-26 18:10
   首先你要知道,使用+可能会带来性能损失,其次类似这种问题应该使用格式化字符串来进行拼接,可以到达很好的性能。
    使用+所带来的性能损失如下:
System.out.println(x+" "+ y + "k");
这里在堆上一共创建了三个对象,如果你要是在一个循环里这样写的话那是很可怕的事情。
如果你这样写System.out.printf("%s%s%s",x,y,"K");




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2