==
到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals()
,并修复了该错误.
是==
坏?什么时候应该不应该使用它?有什么不同?
此代码将字符串分隔为标记并将它们存储在字符串数组中,然后将变量与第一个主页进行比较...为什么它不起作用?
public static void main(String...aArguments) throws IOException {
String usuario = "Jorman";
String password = "14988611";
String strDatos = "Jorman 14988611";
StringTokenizer tokens = new StringTokenizer(strDatos, " ");
int nDatos = tokens.countTokens();
String[] datos = new String[nDatos];
int i = 0;
while (tokens.hasMoreTokens()) {
String str = tokens.nextToken();
datos[i] = str;
i++;
}
//System.out.println (usuario);
if ((datos[0] == usuario)) {
System.out.println("WORKING");
}
}
Run Code Online (Sandbox Code Playgroud) 有什么区别
String str = new String("abc");
Run Code Online (Sandbox Code Playgroud)
和
String str = "abc";
Run Code Online (Sandbox Code Playgroud) 请考虑以下示例.
String str = new String();
str = "Hello";
System.out.println(str); //Prints Hello
str = "Help!";
System.out.println(str); //Prints Help!
Run Code Online (Sandbox Code Playgroud)
现在,在Java中,String对象是不可变的.那么为什么对象str
可以赋值"帮助!".这与Java中字符串的不变性相矛盾吗?任何人都可以向我解释一下不变性的确切概念吗?
编辑:
好.我现在得到它,但只是一个后续问题.以下代码如何:
String str = "Mississippi";
System.out.println(str); // prints Mississippi
str = str.replace("i", "!");
System.out.println(str); // prints M!ss!ss!pp!
Run Code Online (Sandbox Code Playgroud)
这是否意味着再次创建了两个对象("Mississippi"和"M!ss!ss!pp!"),并且引用str
指向replace()
方法之后的另一个对象?
String Pool是什么意思?以下声明之间有什么区别:
String s = "hello";
String s = new String("hello");
Run Code Online (Sandbox Code Playgroud)
JVM存储这两个字符串有什么区别吗?
我们通常使用new
关键字创建对象,例如:
Object obj = new Object();
Run Code Online (Sandbox Code Playgroud)
字符串是对象,但我们不使用new
它们来创建它们:
String str = "Hello World";
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我可以用一个字符串new
吗?
我读过上一篇文章.任何人都可以说CharSequence
和String 之间的确切区别是什么,除了String
实现的事实CharSequence
和那String
是一个字符序列?例如:
CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + " " + str);
Run Code Online (Sandbox Code Playgroud)
当"hello"分配给obj
和再次分配时会发生什么str
?
我是一个学习Java的C++人.我正在阅读Effective Java,有些事让我很困惑.它说从不写这样的代码:
String s = new String("silly");
Run Code Online (Sandbox Code Playgroud)
因为它会创建不必要的String
对象 但相反它应该写成这样:
String s = "No longer silly";
Run Code Online (Sandbox Code Playgroud)
好吧到目前为止......但是,鉴于这个课:
public final class CaseInsensitiveString {
private String s;
public CaseInsensitiveString(String s) {
if (s == null) {
throw new NullPointerException();
}
this.s = s;
}
:
:
}
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
String s = "polish";
Run Code Online (Sandbox Code Playgroud)
为什么第一个陈述好吗?不应该
CaseInsensitiveString cis = "Polish";
我如何使CaseInsensitiveString
行为String
如此上述声明是可以的(有和没有扩展String
)?它是什么让它能够传递像这样的文字?根据我的理解,Java中没有"复制构造函数"概念?
考虑以下代码:
String first = "abc";
String second = new String("abc");
Run Code Online (Sandbox Code Playgroud)
使用new
关键字时,Java会abc
String
再次创建吗?这会存储在常规堆还是String
池中?多少人String
在将s结尾String
池?
我无法理解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)
有人可以帮我理解吗?
java ×10
string ×9
charsequence ×1
constants ×1
core ×1
equality ×1
immutability ×1
integer ×1
new-operator ×1
string-pool ×1