赋值运算符是否消耗Java中的内存?

时间:2016-03-21 11:55:34

标签: java variable-assignment

我有两个字符串如下:

"yes", "no"

现在,我想以两种方式比较这些字符串:

  1. 直接:
    示例:"yes".equals("no")

  2. 通过将字符串分配给某个变量: 例如:

    String string1 = "yes";
    String string2 ="no";
    string1.equals(string2);
    
  3. 在这两种情况下,是否存在内存或性能差异?

3 个答案:

答案 0 :(得分:14)

存在非常小的差异(实际上可以忽略不计,我们在这里谈论微优化),因为字符串应该存储在局部变量中,该变量在相应方法的堆栈帧上占用额外的内存。而常量实际上存储在常量池中并共享。根据调用次数可能对JVM进行优化,它不会产生任何影响。

请注意,如果变量为final或有效final(仅分配一次),则字节码将相同,因为在这种情况下,它们被视为常量。

答案 1 :(得分:10)

编译这些代码段将导致相同的字节码。因此,没有内存消耗或性能差异。

赋值运算符从不消耗内存(自动装箱的情况除外:Integer number = 42)。局部变量声明可以在堆栈中分配内存(如果有必要),但您应该更喜欢代码可读性。

答案 2 :(得分:7)

我猜,根据编译器的不同,它可能会占用堆栈上2个额外的对象引用空间。这些足够小,你通常可以忽略它们,除非你描述了你的应用程序并且你发现了一个问题(非常不可能)。

  

“是” .equals( “否”)

在实际代码中几乎没有这样的情况,因为你已经知道2个文字是否相同。