黑马程序员技术交流社区

标题: System.out.println()一个简单的问题? [打印本页]

作者: 心?=忐§忑]    时间: 2014-3-28 22:29
标题: System.out.println()一个简单的问题?
public calss SystemDemo{
      public static void main(String args[]){
            int i = 13 ;
            int j = 12 ;
            System.out.println("两数字之和是:" + i+j)  ;
      }
}
结果是 : 1312
public calss SystemDemo{
      public static void main(String args[]){
            int i = 13 ;
            int j = 12 ;
            System.out.println("两数字之和是:" + (i+j))  ;
      }
}
结果是:25
为什么两者的结果不一样啊?
作者: 枫露    时间: 2014-3-28 22:35
因为在 System.out.println("两数字之和是:" + i+j)  ;中“+”代表的是连接符,在System.out.println("两数字之和是:" + (i+j))  ;代码先执行i+j的值,再用“+”连接起来
作者: ╰青青子佩ˊゝ    时间: 2014-3-28 22:42
“两数字之和“+i+j 这个运算从左到右,那么先运算"两数字之和"+i,字符串+数字,+会被当做连接符,i自动当成字符串来运算,那么得到字符串"两数之和i",这个字符串再+j,原理一样,结果便是”两个数之和ij“
”两个数之和“+(i+j)这个运算中,先运算括号内(i+j),两个数字相加,+被当成相加符号,得到25,再+”两数字之和“,这时+为连接符,连接两边字符串,自然得到,两数字之和25.
你可以试试System.out.println(i+j);来验证一下,打印出25。
作者: liushui12344    时间: 2014-3-29 00:14
第一:你的类class拼写错误,编译通不过;
第二:一个字符串与任何值相加都是变为新的字符串,System.out.println("两数字之和是:" + i+j)  ;
------分解下:先变为"两数字之和是:" +i 变为"两数字之和是:  i"然后在变为"两数字之和是:  i j"即"两数字之和是: 1312".
第三:下面那个分析过程如上.
作者: xietansheng    时间: 2014-3-29 00:32
运算符优先级问题,

+ - * /双目运算的顺序是从左往右

("两数字之和是:" + i+j):先算字符串与i相加,而字符串与整数相加,即把整数的字符串形式添加到字符的后面,结果为字符串,然后该字符串再与j相加,结果即为"两数字之和是:1312"。

("两数字之和是:" + (i+j)):由于括号运算符的优先级高于+运算符,因此先算(i + j) ,两个都是整数,即正常相加结果为25,然后字符串再与25相加(将"25"添加到字符串的末尾),结果为字符串:"两数字之和是:25"
作者: 北极雪871208    时间: 2014-3-29 07:12
如果加上括号,则先对括号里进行运算,要是不加括号就按顺序进行运算!我也没基础,大家共勉!:)
作者: ok-Prince    时间: 2014-3-29 11:08
System.out.println("两数字之和是:" + i+j)  ;这句i+j没有括号,不做运算,“+”仅作为连接作用,而不是运算符,若想让i与j进行运算,那必须加上括号。
作者: H-Deka    时间: 2014-3-30 10:34
在java中“+“有两种含义,一种是连接符,由于运算优先级的问题在你的第一次输出语句中“+”用作连接符把i和j的值输出,另外“+”还有一种数学中的加法运算的含义,在java中()的优先级最高,所以先运算i加j然后输出他们的和
作者: 小班。    时间: 2014-3-30 12:02
  1.         public calss SystemDemo{
  2.               public static void main(String args[]){
  3.                     int i = 13 ;
  4.                     int j = 12 ;
  5.                     //在输出语句中“+”符号是连接字符串语句用的。在String类中可以看到该字符的解释、
  6.                     //在打印时,println会自动把int类型的i,和j转换成字符串的。
  7.                     //该语句的解释为:先打印出i的值,再打印出j的值,
  8.                     //相当于  System.out.println("两数字之和是:" + "13"+"12");所以结果是1312
  9.                     System.out.println("两数字之和是:" + i+j)  ;
  10.               }
  11.         }
  12. //        结果是 : 1312
  13.         public calss SystemDemo{
  14.               public static void main(String args[]){
  15.                     int i = 13 ;
  16.                     int j = 12 ;
  17.                     //这个语句分解开来就相当于是先执行i+j的运算,再把结果打印出来。
  18.                     //分解开的语句是:
  19.                     //int n=i+j;
  20.                     //System.out.println("两数字之和是:" + n);
  21.                     //println会自动把int类型的n转换成字符串。如下句:
  22.                     //System.out.println("两数字之和是:" + ("25");
  23.                    
  24.                     System.out.println("两数字之和是:" + (i+j));
  25.               }
  26.         }
  27. //        结果是:25
复制代码

作者: 雪碧拌米饭    时间: 2014-3-30 13:09
第一个例子上的加号是字符连接,而第二个例子中的(i+j)加上括号后表示一种运算
作者: 杨殿生    时间: 2014-3-30 20:25
"两数字之和是:" + i+j i,j会变成字符串输出就是1312  加了括号之后就是两个int型运算然后输出所以是25




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