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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戎石锁 中级黑马   /  2012-8-5 09:14  /  2036 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戎石锁 于 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, 下载次数: 18)

q1.jpg

12 个回复

倒序浏览
哥们!不用实名是不能给分的!申请改名同道!http://bbs.itheima.com/thread-19719-1-1.html
回复 使用道具 举报
因为,运算顺序是从左往右,
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"了

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
杨志 发表于 2012-8-5 09:27
哥们!不用实名是不能给分的!申请改名同道!http://bbs.itheima.com/thread-19719-1-1.html ...

好的 现在去申请···
回复 使用道具 举报
本帖最后由 刘悦 于 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

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

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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+"");
}
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
呵呵 你们真快啊  在我编辑的时候就回答好了  看来我的回答有点多余  不过 能参考就用用吧
回复 使用道具 举报
楼主看我的注释

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

解释

解释
回复 使用道具 举报
本帖最后由 龙卷风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();




回复 使用道具 举报
但实际上这个+号在jvm中已经重载好了,只是不允许编程人员重载运算符
回复 使用道具 举报
这个就是+ 什么时候是相加什么时候是连接的问题

System.out.println(1+2);  这个 1和2 都是int类型的 所以相加
System.out.println(""+1+2); ""是字符串 所以+是连接
System.out.println(1+""+2);同上
System.out.println(1+2+""); 和第一个相同的原理
}
回复 使用道具 举报
谢谢各位 了解了
回复 使用道具 举报
刚刚接触 看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马