黑马程序员技术交流社区

标题: 为什么编译不通过? [打印本页]

作者: 许飞翔    时间: 2012-3-11 13:45
标题: 为什么编译不通过?
  1. class Test
  2. {  
  3.     public static void main(String[] args)
  4.         {  
  5.         int i1 = 10;
  6.         int i2 = 10;  
  7.         System.out.println("i1 + i2 = " + i1 + i2);  
  8.         System.out.println("i1 - i2 = " + i1 - i2);  
  9.         System.out.println("i1 * i2 = " + i1 * i2);  
  10.         System.out.println("i1 / i2 = " + i1 / i2);  
  11.     }  
  12. }  
复制代码

作者: 編程浪子    时间: 2012-3-11 13:57
  1. class Test

  2. {  

  3.     public static void main(String[] args)

  4.        {  

  5.       int i1 = 10;

  6.         int i2 = 10;  

  7.        System.out.println("i1 + i2 = " + (i1 + i2));  

  8.        System.out.println("i1 - i2 = " + (i1 - i2));  

  9.       System.out.println("i1 * i2 = " + (i1 * i2));  

  10.        System.out.println("i1 / i2 = " + (i1 / i2));  

  11.   }  

  12. }  
  13. 你没加括号都变成字符串了,而—不能识别。所以要都要加上括号,
复制代码

作者: 冯旭君    时间: 2012-3-11 13:59
class Test {
        public static void main(String[] args) {
                int i1 = 10;
                int i2 = 10;
                System.out.println("i1 + i2 = " + (i1 + i2));
                System.out.println("i1 - i2 = " + (i1 - i2));
                System.out.println("i1 * i2 = " + i1 * i2);
                System.out.println("i1 / i2 = " + i1 / i2);
        }
}

这样编译就没有错误了,为+和-的运算符优先级是一样的,你写上"i1 - i2 = " + i1 - i2肯定是不行的,因为编译器会认为:让字符传+一个数字变成了一个字符串这没有问题,然后再减去一个数字,那肯定就错误了。还有你输出的第一句,"i1 + i2 = " + i1 + i2输出结果是 :i1 + i2 = 1010;而并非i1 + i2 = 20。
作者: 许前刚    时间: 2012-3-11 14:03
应该这样写吧!
System.out.println("i1 + i2 = " +( i1 + i2));  
System.out.println("i1 - i2 = " +( i1 - i2));  
System.out.println("i1 * i2 = " + (i1 * i2));  
System.out.println("i1 / i2 = " + (i1 / i2));  

如果像你那样写,如("i1 * i2 = " + i1 * i2));  编译器运行到i1时就把i1 * i2 = " + i1的类型扩大到字符串了,因为这里的+号已经不是算术运算的加号了,而是字符串的连接,字符串是不能和i2相乘的。
作者: 王录林    时间: 2012-3-11 14:05
楼上正解!
作者: baypm_jy    时间: 2012-3-11 14:23
class Test
{  
    public static void main(String[] args)
        {  
        int i1 = 10;
        int i2 = 10;  
        System.out.println("i1 + i2 = " + i1 + i2);      +i1是变成字符串了,再加i2也没有问题,只是得不到你想要的结果,正解: System.out.println("i1 + i2 = " +( i1 + i2));      
        System.out.println("i1 - i2 = " + i1 - i2);     +i1变成了字符串了,然后又减上i2,问题来了,字符串与数字相减肯定会有问题,正解:
        System.out.println("i1 - i2 = " +( i1 - i2));
        System.out.println("i1 * i2 = " + i1 * i2);     可以这样写,由于*优先级高些,所以正确
        System.out.println("i1 / i2 = " + i1 / i2);     可以这样写,由于/优先级高些,所以正确

    }  
}  
作者: 倪鹏博    时间: 2012-3-11 15:40
+会被识别成连接符,所以会报错




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