A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-张洋 中级黑马   /  2013-2-26 15:36  /  3030 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢?
我记得曾经我知道过,但是我已经忘了,也不知道到哪去找了

10 个回复

倒序浏览
那个双引号里面有空格?
回复 使用道具 举报
本帖最后由 李挺 于 2013-2-26 15:51 编辑

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

是啊,没空格怎么打出的来
回复 使用道具 举报
李挺 发表于 2013-2-26 15:40
加减乘除运算的结合性是从左到右的
当2个不同类型进行运算时会进行转化
X+“”会将结果转化个字符串

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

谢谢你了。明白了
回复 使用道具 举报
黑马-张洋 发表于 2013-2-26 15:47
是啊,没空格怎么打出的来

你把“”之间的空格去掉 那个5 2k中间的空格不就没有了,变成52k了吗
回复 使用道具 举报
李志卫 发表于 2013-2-26 16:02
你把“”之间的空格去掉 那个5 2k中间的空格不就没有了,变成52k了吗

晕,我不熟悉原来+”“就可以转成字符串
回复 使用道具 举报
   首先你要知道,使用+可能会带来性能损失,其次类似这种问题应该使用格式化字符串来进行拼接,可以到达很好的性能。
    使用+所带来的性能损失如下:
System.out.println(x+" "+ y + "k");
这里在堆上一共创建了三个对象,如果你要是在一个循环里这样写的话那是很可怕的事情。
如果你这样写System.out.printf("%s%s%s",x,y,"K");
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马