在class里定义的一个变量,若全局没被用到,会在编译时被优化移除掉吗?
如果这个变量是static的呢?如果再加public的呢?

解决方案 »

  1.   

    如果你的变量是在class类中方法外面,就是所谓的全局变量的话,他的生命周期跟static静态变量一样,都是程序结束了才销毁,如果是方法体内定义的变量,程序只要走出变量所在的方法,变量就会销毁,不管你有没有定义public修饰符 都是一样
      

  2.   

    你好,我问的不是变量的生命周期,而是说这个变量没有被使用到的话,会不会在编译后,被编译器优化算法给移掉?恩,我上面已经说了,如果是全局变量的话只要创建了,程序结束了才销毁(意思就是说不管你使用还是不适用这个对象他还是存在的,除非程序结束了他才销毁)这不需要程序运行啊,所以无关乎创建销毁。我只是想知道编译后的结果。即反编译后那些没使用到的变量还在不在。
    我自己测试出来了。
    1)对所有属于class的变量不做优化移除,即使它没有被使用时。
    2)对所有属于method内部的变量优化后移除,如果它没有被使用时。
    测试环境是jdk1.6
      

  3.   


    你好,我问的不是变量的生命周期,而是说这个变量没有被使用到的话,会不会在编译后,被编译器优化算法给移掉?恩,我上面已经说了,如果是全局变量的话只要创建了,程序结束了才销毁(意思就是说不管你使用还是不适用这个对象他还是存在的,除非程序结束了他才销毁)这不需要程序运行啊,所以无关乎创建销毁。我只是想知道编译后的结果。即反编译后那些没使用到的变量还在不在。
    我自己测试出来了。
    1)对所有属于class的变量不做优化移除,即使它没有被使用时。
    2)对所有属于method内部的变量优化后移除,如果它没有被使用时。
    测试环境是jdk1.6
    哦,你是说编译后,还没程序运行,这个在内存应该是不存在的,但是如果你保存的话,会保存在.java文件中,但你说的优化移除我就不懂了!!