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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心?=忐§忑] 中级黑马   /  2014-3-28 22:29  /  1789 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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
为什么两者的结果不一样啊?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

10 个回复

倒序浏览
因为在 System.out.println("两数字之和是:" + i+j)  ;中“+”代表的是连接符,在System.out.println("两数字之和是:" + (i+j))  ;代码先执行i+j的值,再用“+”连接起来
回复 使用道具 举报
“两数字之和“+i+j 这个运算从左到右,那么先运算"两数字之和"+i,字符串+数字,+会被当做连接符,i自动当成字符串来运算,那么得到字符串"两数之和i",这个字符串再+j,原理一样,结果便是”两个数之和ij“
”两个数之和“+(i+j)这个运算中,先运算括号内(i+j),两个数字相加,+被当成相加符号,得到25,再+”两数字之和“,这时+为连接符,连接两边字符串,自然得到,两数字之和25.
你可以试试System.out.println(i+j);来验证一下,打印出25。

评分

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

查看全部评分

回复 使用道具 举报
第一:你的类class拼写错误,编译通不过;
第二:一个字符串与任何值相加都是变为新的字符串,System.out.println("两数字之和是:" + i+j)  ;
------分解下:先变为"两数字之和是:" +i 变为"两数字之和是:  i"然后在变为"两数字之和是:  i j"即"两数字之和是: 1312".
第三:下面那个分析过程如上.

评分

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

查看全部评分

回复 使用道具 举报
运算符优先级问题,

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

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

("两数字之和是:" + (i+j)):由于括号运算符的优先级高于+运算符,因此先算(i + j) ,两个都是整数,即正常相加结果为25,然后字符串再与25相加(将"25"添加到字符串的末尾),结果为字符串:"两数字之和是:25"

评分

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

查看全部评分

回复 使用道具 举报
如果加上括号,则先对括号里进行运算,要是不加括号就按顺序进行运算!我也没基础,大家共勉!:)
回复 使用道具 举报
System.out.println("两数字之和是:" + i+j)  ;这句i+j没有括号,不做运算,“+”仅作为连接作用,而不是运算符,若想让i与j进行运算,那必须加上括号。
回复 使用道具 举报
H-Deka 中级黑马 2014-3-30 10:34:38
8#
在java中“+“有两种含义,一种是连接符,由于运算优先级的问题在你的第一次输出语句中“+”用作连接符把i和j的值输出,另外“+”还有一种数学中的加法运算的含义,在java中()的优先级最高,所以先运算i加j然后输出他们的和
回复 使用道具 举报
  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
复制代码
回复 使用道具 举报
第一个例子上的加号是字符连接,而第二个例子中的(i+j)加上括号后表示一种运算
回复 使用道具 举报
"两数字之和是:" + i+j i,j会变成字符串输出就是1312  加了括号之后就是两个int型运算然后输出所以是25
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马