我有两个字符串如下:
"yes", "no"
。
现在,我想以两种方式比较这些字符串:
直接:
示例:"yes".equals("no")
通过将字符串分配给某个变量: 例如:
String string1 = "yes";
String string2 ="no";
string1.equals(string2);
在这两种情况下,是否存在内存或性能差异?
答案 0 :(得分:14)
存在非常小的差异(实际上可以忽略不计,我们在这里谈论微优化),因为字符串应该存储在局部变量中,该变量在相应方法的堆栈帧上占用额外的内存。而常量实际上存储在常量池中并共享。根据调用次数可能对JVM进行优化,它不会产生任何影响。
请注意,如果变量为final
或有效final
(仅分配一次),则字节码将相同,因为在这种情况下,它们被视为常量。
答案 1 :(得分:10)
编译这些代码段将导致相同的字节码。因此,没有内存消耗或性能差异。
赋值运算符从不消耗内存(自动装箱的情况除外:Integer number = 42
)。局部变量声明可以在堆栈中分配内存(如果有必要),但您应该更喜欢代码可读性。
答案 2 :(得分:7)
我猜,根据编译器的不同,它可能会占用堆栈上2个额外的对象引用空间。这些足够小,你通常可以忽略它们,除非你描述了你的应用程序并且你发现了一个问题(非常不可能)。
“是” .equals( “否”)
在实际代码中几乎没有这样的情况,因为你已经知道2个文字是否相同。