==到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals(),并修复了该错误.
是==坏?什么时候应该不应该使用它?有什么不同?
关于 .NET中字符串文字的最新问题引起了我的注意.我知道字符串文字被实习,因此具有相同值的不同字符串引用同一个对象.我也知道字符串可以在运行时实现:
string now = DateTime.Now.ToString().Intern();
Run Code Online (Sandbox Code Playgroud)
显然,在运行时实例化的字符串驻留在堆上,但我假设文字放在程序的数据段中(并且在我对所述问题的回答中这样说).但是我不记得在任何地方看到这个.我认为这是这种情况,因为我是如何做到这一点以及ldstrIL指令用于获取文字并且似乎没有进行分配的事实似乎支持我.
简而言之,字符串文字在哪里?它是在堆上,数据段还是我没想过的某个地方?
编辑:如果字符串文字确实驻留在堆上,它们何时分配?
可能重复:
Java中的字符串:equals vs ==
大家好,为什么这个Java代码不能正常工作(if语句总是被读为False,总是给任何输入输出4,包括Anish和"Anish")?
import java.util.Scanner;
public class lkjlj {
public static void main(String args []) {
Scanner Pillai = new Scanner(System.in);
System.out.println("Enter Your name");
String nabeel = Pillai.nextLine();
System.out.println(nabeel);
if (nabeel == "Anish") {
System.out.println("Your Age is 6");
} else {
System.out.println("Your age is 4");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个字符串; 一个是小写的"你好",一个是上层的"你好".
当我将toUpperCase应用于变量,然后使用布尔值来比较它们时,它们的出现并不相等,我无法弄清楚原因.
public static void main(String[] args) {
String a = "hello";
String b = "HELLO";
a = a.toUpperCase();
b = b.toUpperCase();
boolean c = (a==b);
System.out.println(b + " " + a + " " + c);
}
Run Code Online (Sandbox Code Playgroud)
输出是HELLO HELLO假,但它应该是HELLO HELLO true.不应该吗?我错过了什么?
当我们用Java编写以下代码时:
object1 == object2;
运营商'=='在什么基础上决定平等?