有布尔池这样的东西吗?

时间:2018-05-07 08:08:04

标签: java

我有两个问题,不幸的是我找不到答案。

  1. 如果我们声明1000个布尔变量等于true,它们是否都对true字面值具有相同的引用?

  2. Java是按值传递的,所以请考虑代码

    public class Test {
        public static boolean global;
    
        public static void main(String[] args) {
            foo(false);
            System.out.println(global);
        }
    
        public static void foo(boolean bar) {
            global = bar;
        }
    }
    
  3. foo()方法中,将复制布尔变量的原始值,这意味着global将为文字提供另一个引用。或者Java会为此执行某种池查找,global还会引用与参数相同的内存位置吗?

1 个答案:

答案 0 :(得分:2)

是的,有一个游泳池。但是,只有当您使用Boolean对象而不是boolean原始值并且使用方法valueofBoolean.TRUE / Boolean.FALSE构造函数的内容创建它时。查看Boolean javadoc以获取参考。

另外,请查看constructor javadoc。它说:

  

使用此构造函数很少是合适的。除非需要新实例,否则静态工厂valueOf(boolean)通常是更好的选择。它可能会产生明显更好的空间和时间性能。