==到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals(),并修复了该错误.
是==坏?什么时候应该不应该使用它?有什么不同?
我想澄清一下我是否理解正确:
== - >是参考比较,即两个对象都指向相同的内存位置.equals() - >计算对象中值的比较我的理解是正确的吗?
有什么区别
String str = new String("abc");
Run Code Online (Sandbox Code Playgroud)
和
String str = "abc";
Run Code Online (Sandbox Code Playgroud) 这两个陈述之间有什么区别?
String s = "text";
String s = new String("text");
Run Code Online (Sandbox Code Playgroud) 我们通常使用new关键字创建对象,例如:
Object obj = new Object();
Run Code Online (Sandbox Code Playgroud)
字符串是对象,但我们不使用new它们来创建它们:
String str = "Hello World";
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我可以用一个字符串new吗?
在比较字符串值时,我会一直开始使用===(三等号,严格比较),但现在我发现了
"foo" === new String("foo")
Run Code Online (Sandbox Code Playgroud)
是假的,与此相同:
var f = "foo", g = new String("foo");
f === g; // false
Run Code Online (Sandbox Code Playgroud)
当然:
f == g; // true
Run Code Online (Sandbox Code Playgroud)
那么建议总是使用==进行字符串比较,或者总是在比较之前将变量转换为字符串?
我对Java中的StringPool感到困惑.我在阅读Java中的String章节时遇到过这个问题.请以外行的方式帮助我理解StringPool实际上做了什么.
我无法理解Java Constant Pool for Integer的工作原理.
我理解字符串的行为,因此能够证明自己与Integer Constants的情况相同.
所以,对于整数
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2); // True
Run Code Online (Sandbox Code Playgroud)
&
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1==i2); // False
Run Code Online (Sandbox Code Playgroud)
直到这里,一切都在我的脑海里.
我无法消化的是,当我从127增加整数时,它的行为有所不同.这种行为在127之后发生变化,下面是代码片段
Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1==i2); // False. WHY?????
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解吗?
有没有办法检查,目前字符串池中有哪些字符串.
我可以以编程方式列出池中存在的所有字符串吗?
要么
任何IDE都有这种插件吗?
以下代码创建了多少个String对象?
String x = new String("xyz");
String y = "abc";
x = x + y;
Run Code Online (Sandbox Code Playgroud)
我访问过许多网站,其中一些人说这行代码创建了3个对象,有些人说它创建了4个.我只是想知道在执行这行代码后创建了多少个对象.
java ×9
string ×6
equality ×3
constants ×1
core ×1
identity ×1
integer ×1
javascript ×1
new-operator ×1
object ×1
string-pool ×1