黑马程序员技术交流社区

标题: 编译的问题,为什么会失败? [打印本页]

作者: 周坤    时间: 2012-8-7 02:24
标题: 编译的问题,为什么会失败?
  1. public class StaticDe {

  2.         public static Object obj;
  3.         public static int number=5;
  4.         public static String ss="为什么";
  5.        
  6.         public static void main(String[] args) {

  7.                 System.out.println(obj);
  8.                 System.out.println(number);
  9. //                System.out.println(obj+number+"为什么编译失败?");
  10.                 System.out.println("为什么编译成功?"+obj+number);
  11.                

  12.         }

  13. }
复制代码

作者: 张扬123    时间: 2012-8-7 03:17
代码复制全了么?我试了编译通过的啊。
作者: 李知伦    时间: 2012-8-7 03:24
本帖最后由 李知伦 于 2012-8-7 03:28 编辑

obj+number    Object对象不能用+跟整形的对象进行运算
""+obj+number=new StringBuffer().append("").append(obj).append(number).toString()
StringBuffer类的append()方法,可以传入Object类型的变量
作者: 潘星    时间: 2012-8-7 06:36
因为代码运行是有先后顺序的,
  System.out.println(obj+number+"为什么编译失败?");就拿这句话来说吧,
他会先运行obj+number,而number是int类型变量,而obj是Object类型的变量,是不能进行“+”号运算的,所以编译失败。
但是System.out.println("为什么编译成功?"+obj+number);这句话会编译成功而且会有运行结果,
因为任何数据跟""字符串进行加法运算后其结果都是字符串,所以"为什么编译成功?"会先跟obj运算结果是个字符串,
在跟number运算,结果也是个字符串。
作者: 戎石锁    时间: 2012-8-7 07:33
本帖最后由 戎石锁 于 2012-8-7 07:35 编辑

class public class StaticDe
{
        public static Object obj;
        public static int number=5;
        public static String ss="为什么";
        public static void main(String[] args)
        {
                System.out.println(obj);
                System.out.println(number);
                //System.out.println(obj+number+"为什么编译失败?");
                //因为而obj是Object类型的变量,number是int类型变量,不能进行“+”号运算的,所以编译失败。

                System.out.println("为什么编译成功?"+obj+number);   
                //因为任何数据和“”相加后的结果都是字符串 ,所以最后结果也是字符串      
        }
}

//上面的代码和 下面这个代码道理一样

public class Test
{
        public static void main(String args[])
        {
                System.out.println(1+2);
                System.out.println(""+1+2);//1和“”是字符串 然后再和2相加也是字符串,所以结果是12
                System.out.println(1+""+2);
                System.out.println(1+2+"");
        }
}

打印结果是3  12  12  3
作者: 周坤    时间: 2012-8-7 11:42
谢谢各位。
问题已解决。
作者: 王峰    时间: 2012-8-7 12:05
public class StaticDe {

        public static Object obj;
        public static int number=5;
        public static String ss="为什么";
        
        public static void main(String[] args) {

                System.out.println(obj);
                System.out.println(number);
                //楼主null+数字是错误的,中间加个字符串,
               System.out.println(obj+""+number+"为什么编译失败?");
                System.out.println("为什么编译成功?"+obj+number);
               
        }
}





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