黑马程序员技术交流社区

标题: 新手求问,System.out.println()里面的问题 [打印本页]

作者: 周俊波    时间: 2014-4-14 17:10
标题: 新手求问,System.out.println()里面的问题
  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”呢?
作者: 刘岳林    时间: 2014-4-14 17:16
只有与字符串相加的时候才都转换成字符串,第二次打印的时候前边就是int类型相加,到最后+s的时候才都转换成字符串
作者: 黄晓鑫    时间: 2014-4-14 17:34
算术运算符 +,-,*,/,%,++,--
+):正号,加法,字符串连接符。
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
作者: 陈冬冬    时间: 2014-4-14 17:38
s+x+y+z,因为s是字符串,后面的整数被被强制转换成了字符串,直接与S连接。而x+y+z+s,x,y,z直接相加,变成3,再与字符串连接
作者: ilvsoft    时间: 2014-4-14 17:40
+是一个左运算符,如果有多个+的时候都是先从左边运算的,那么第一个输出语句第一个s是字符串,这个时候+是个连接运算符,那么后面的x,y,z都会转成字符串连接,输出x,y,z012
第二个最左边是int类型,那么+是算数运算符,所以x+y+z=3,而最后+后面跟的是一个字符串,那么这个+就是一个字符串连接运算符,所以他会把2用字符串的形式和s想连接,所以输出3x,y,z
作者: NewDemo    时间: 2014-4-14 18:00
运算符的优先级一样的话就是从左往右算吧,因为括号的优先级高,所以先算括号里面的,楼主实验下这个方式System.out.println(x+(y+(z+s)))
作者: luoyilan222    时间: 2014-4-14 18:28
        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"//数字和字符串相加数字会先被转换为字符串后在相加
        }
作者: tjsyj    时间: 2014-4-14 19:06
代码是按顺序执行,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。
作者: 耳东君    时间: 2014-4-15 09:58
因为你定义的s是字符串
作者: Linuxgg    时间: 2014-4-15 10:15
1。运算顺序。+=〉是从左到右。
2。不同数据类型的运算,会自动提升。

例如,String+String =>String, int+int =>int
例子中是int+int+String, 所以,第一步,两个int相加得到int,也就是3,
而下一步就是int+String=>是String. int会提升为String。
作者: ._抬眉﹏    时间: 2014-4-15 20:10
1楼正解,受教了

作者: 彭飞    时间: 2014-4-15 23:42
这个不难理解吧,
在学习运算符的时候,老师给的表中,就有两个+
为什么,因为他们有不同的含义,一个是相加,一个是连接。
第一个输出语句是用s字符串连接后面的和
第二个输出语句是用和连接s字符串

这题吧,说难,其实就是把int类型的 变量名,雷同了,s字符串里的字符。你任意换其中一组,
在走一个试试,你就发现,如此如此。
作者: 宋大龙    时间: 2014-4-16 13:57
你其实没有理解的是字符串相加和运算顺序的概念 ,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  




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