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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周俊波 中级黑马   /  2014-4-14 17:10  /  1906 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class test1 {
  2.         public static void main(String[] args) {
  3.                 int x=0,y=1,z=2;
  4.                 String s = "x,y,z";
  5.                 System.out.println(s + x + y + z);
  6.                 System.out.println(x + y + z + s);
  7.                
  8.         }
  9. }
复制代码


第一个输出,是以文本的形式相加“x,y,z012” 第二个输出问什么就是“3x,y,z”呢?

12 个回复

倒序浏览
只有与字符串相加的时候才都转换成字符串,第二次打印的时候前边就是int类型相加,到最后+s的时候才都转换成字符串
回复 使用道具 举报
算术运算符 +,-,*,/,%,++,--
+):正号,加法,字符串连接符。
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5

评分

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

查看全部评分

回复 使用道具 举报
s+x+y+z,因为s是字符串,后面的整数被被强制转换成了字符串,直接与S连接。而x+y+z+s,x,y,z直接相加,变成3,再与字符串连接
回复 使用道具 举报
+是一个左运算符,如果有多个+的时候都是先从左边运算的,那么第一个输出语句第一个s是字符串,这个时候+是个连接运算符,那么后面的x,y,z都会转成字符串连接,输出x,y,z012
第二个最左边是int类型,那么+是算数运算符,所以x+y+z=3,而最后+后面跟的是一个字符串,那么这个+就是一个字符串连接运算符,所以他会把2用字符串的形式和s想连接,所以输出3x,y,z

评分

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

查看全部评分

回复 使用道具 举报 2 0
NewDemo 来自手机 中级黑马 2014-4-14 18:00:03
地板
运算符的优先级一样的话就是从左往右算吧,因为括号的优先级高,所以先算括号里面的,楼主实验下这个方式System.out.println(x+(y+(z+s)))
回复 使用道具 举报
        public static void main(String[] args) {
                int x = 0, y = 1, z = 2;
                String s = "x,y,z";
                System.out.println(s + x + y + z);
//                可以分为以下几步:
//                        s + x           ——> "x,y,z0"; //x会被转化成 "0" 字符串
//                        "x,y,z" + y     ——> x,y,z01"   
//                        x,y,z01" + z     ——> x,y,z012"   
                System.out.println(x + y + z + s);
//                可以分为以下几步:
//                        x + y           ——> 1; //数字相加结果为1
//                        1 + z           ——> 3   
//                        3 + z           ——> "3" + "x,y,z" ——> "3x,y,z"//数字和字符串相加数字会先被转换为字符串后在相加
        }

评分

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

查看全部评分

回复 使用道具 举报
tjsyj 中级黑马 2014-4-14 19:06:58
8#
代码是按顺序执行,s+x+y+z 是 依次执行 ,先是 S+x  是字符串x,y,z与整数 0相连,变成字符串 x,y,z0 再与Y相连变成 字符串  x,y,z01 再与z相连 变成 x,y,z012

x+y+z+s是 整数 X+Y+Z 整数想加得到 整数结果 3 然后再与字符串相连 变成 3x,y,z。

评分

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

查看全部评分

回复 使用道具 举报
因为你定义的s是字符串
回复 使用道具 举报
1。运算顺序。+=〉是从左到右。
2。不同数据类型的运算,会自动提升。

例如,String+String =>String, int+int =>int
例子中是int+int+String, 所以,第一步,两个int相加得到int,也就是3,
而下一步就是int+String=>是String. int会提升为String。
回复 使用道具 举报
1楼正解,受教了
回复 使用道具 举报
这个不难理解吧,
在学习运算符的时候,老师给的表中,就有两个+
为什么,因为他们有不同的含义,一个是相加,一个是连接。
第一个输出语句是用s字符串连接后面的和
第二个输出语句是用和连接s字符串

这题吧,说难,其实就是把int类型的 变量名,雷同了,s字符串里的字符。你任意换其中一组,
在走一个试试,你就发现,如此如此。
回复 使用道具 举报
你其实没有理解的是字符串相加和运算顺序的概念 ,1举个例子 我们会接触到很多如   int x = 4;  System.out.println(“x=”+int x);这样的写法,打印出来就会是  x=4
而你这个题里面 定义了int x=0,y=1,z=2  和String s = "x,y,z"   记住String 定义的是一个字符串就OK 了。
而字符串相加  这个加号代表相连接   所以是x,y,z012
2、先相加之后在连接一个字符串  就是 3x,y,z  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马