黑马程序员技术交流社区

标题: 求解释个问题(谢谢各位,已解决) [打印本页]

作者: 戎石锁    时间: 2012-8-5 09:14
标题: 求解释个问题(谢谢各位,已解决)
本帖最后由 戎石锁 于 2012-8-6 08:51 编辑

public class Test{
public static void main(String args[]){
System.out.println(1+2);
System.out.println(""+1+2);
System.out.println(1+""+2);
System.out.println(1+2+"");
}
}

主要是第2个 为什么打印的是12

q1.jpg (1.59 KB, 下载次数: 19)

q1.jpg

作者: 杨志    时间: 2012-8-5 09:27
哥们!不用实名是不能给分的!申请改名同道!http://bbs.itheima.com/thread-19719-1-1.html
作者: 黑马__李龙    时间: 2012-8-5 09:39
因为,运算顺序是从左往右,
System.out.println(1+2);    1+2 =3,所以打印3
System.out.println(""+1+2);    ""+1  :这时1变成了String的1了,它是字符串,"1" + 2 :就变成字符串"12"了
System.out.println(1+""+2);   1+"" :这时变成了字符串"1","1" + 2 :就变成字符串"12"了
System.out.println(1+2+"");   1+2 :1+2 是数字相加 等于3 , 3+""  就变成字符串"3"了
作者: 戎石锁    时间: 2012-8-5 09:41
杨志 发表于 2012-8-5 09:27
哥们!不用实名是不能给分的!申请改名同道!http://bbs.itheima.com/thread-19719-1-1.html ...

好的 现在去申请···
作者: 刘悦    时间: 2012-8-5 09:54
本帖最后由 刘悦 于 2012-8-5 10:26 编辑

原因如下:
  1. System.out.println(1+2);
复制代码
这句是先将整数类型的1和整数类型的2相加,等于3,然后打印输出
  1. System.out.println(""+1+2);
复制代码
这句话要注意了,前面有一个"",因为都是加号,运算符优先级一样,所以运算顺序从左往右进行,""+1会将整数类型1转换成字符串类型数据1,然后字符串数据类型1+整数数据类型2,此时2也会转换成字符串数据类型2,字符串+字符串,那就是拼接了,所以打印输出12,""+1中的加号,就相当于一个字符串的连接符。
  1. System.out.println(1+""+2);
复制代码
分析方法一样,整数类型1+字符串,转换成字符串数据类型1,然后加上整数类型2,即加上字符串类型2,打印输出12
  1. System.out.println(1+2+"");
复制代码
这句是先将两个整数类型的数据 1和2相加,得到整数数据类型3,然后转换成字符串类型3与后面的字符串""相加,最后打印输出的是字符串数据类型3

其实就是一个先数字运算的话就是加号,字符串前后加号就是字符串的连接符,这样记即会好些,毕老师的视频上有很详尽的解释。
楼主加油啊!版主幸苦了~

作者: 罗磊    时间: 2012-8-5 09:56
public class Test{
public static void main(String args[]){
System.out.println(1+2);
System.out.println(""+1+2);//  ""+1 后 +相当于连接符  然后 1被转换string类型 然后 再+2 中的 + 也相当于连接符 然后结果就是 12
System.out.println(1+""+2);//  1+"" 后 +相当于连接符 然后 1被转换string类型 然后 再+2 中的 + 也相当于连接符 然后结果就是 12

System.out.println(1+2+"");
}
}
作者: 罗磊    时间: 2012-8-5 09:59
呵呵 你们真快啊  在我编辑的时候就回答好了  看来我的回答有点多余  不过 能参考就用用吧
作者: 王峰    时间: 2012-8-5 11:24
楼主看我的注释

未命名.jpg (64.5 KB, 下载次数: 30)

解释

解释

作者: 王峰    时间: 2012-8-5 11:26
本帖最后由 龙卷风V龙卷风 于 2012-8-5 11:37 编辑

楼主可以去了解一下C++重载运算符的知识点,当然java中是不能定义重载运算符的,只能重载方法,当然他们的效果是一样的,嘿嘿,java中,字符串中的+实际上是重载的append方法,如下面,其中obj对象可以为任何类型
Object obj;
String str;
String result=obj+str;

由于java不存在运算符重载的概念,JVM编译时将其转换成:
String result=(new StringBulider()).append(obj).append(str).toString();





作者: 王峰    时间: 2012-8-5 11:51
但实际上这个+号在jvm中已经重载好了,只是不允许编程人员重载运算符
作者: 王晓龙    时间: 2012-8-5 11:55
这个就是+ 什么时候是相加什么时候是连接的问题

System.out.println(1+2);  这个 1和2 都是int类型的 所以相加
System.out.println(""+1+2); ""是字符串 所以+是连接
System.out.println(1+""+2);同上
System.out.println(1+2+""); 和第一个相同的原理
}
作者: 戎石锁    时间: 2012-8-5 19:59
谢谢各位 了解了
作者: 澄海    时间: 2012-8-5 22:33
刚刚接触 看看




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