==到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals(),并修复了该错误.
是==坏?什么时候应该不应该使用它?有什么不同?
根据String #intern(),intern如果在String池中找到String,则该方法应该从String池返回String,否则将在String池中添加新的字符串对象并返回此String的引用.
所以我试过这个:
String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();
if ( s1 == s2 ){
System.out.println("s1 and s2 are same"); // 1.
}
if ( s1 == s3 ){
System.out.println("s1 and s3 are same" ); // 2.
}
Run Code Online (Sandbox Code Playgroud)
我期待s1 and s3 are same将被打印为s3被实习,并且s1 and s2 are same不会被打印.但结果是:两行都打印出来.这意味着,默认情况下,字符串常量被实现.但如果是这样,那么为什么我们需要这种intern方法呢?换句话说,我们什么时候应该使用这种方法?
所有,我在编写下面的代码时遇到了问题
String hello = "Hello";
String str5 = "Hel" + "lo";
String str8 = "Hel";
String str9 = "lo";
String str10 = str8 + str9;
System.out.println("str10==hello?" + (str10 == hello));
System.out.println("str5==hello?" + (str5 == hello));
System.out.println("str10==str5?" + (str10 == str5));
Run Code Online (Sandbox Code Playgroud)
然后我运行我的代码,控制台打印这个
str10 == hello ? false
str5 == hello ? true
str10 == str5 ? false
Run Code Online (Sandbox Code Playgroud)
这让我很困惑.为什么第二次打印TRUE但第一次打印FALSE?在我理解String文字池时,当一个字符串被定义并且JVM将检查池是否包含该字符串时,如果没有,则将该字符串放入池中.
在我的代码中,变量hello存在于字符串池中," Helo "和" lo "也存在于池中,我的问题是
我的jdk版本:1.6.0_29
我的IDE:Intellij Idea 11.2
有人可以指出来吗?非常感谢你
感谢您抽出时间来阅读.对不起,如果我的问题是愚蠢的,我尝试搜索,但无法弄清楚为什么我遇到这个问题.我试图为另一个应用程序测试一些代码,但我遇到了问题.也许我只是不理解数组.
我在名为Transpose的类中有一个名为halfStepUp的方法,出于测试目的,如果给出"c",则返回"c#",如果给出"d",则返回"d#".这是代码:
public class Transpose{
public static String halfStepUp(String note){
String n = null;
if (note == "c") n = "c#";
if (note == "d") n = "d"#;
return n;
}
}
Run Code Online (Sandbox Code Playgroud)
我的main方法中有以下代码:
String [] scale = new String[2];
scale[0] = "c";
scale[1] = "d";
System.out.println(Transpose.halfStepUp(scale[0]));
Run Code Online (Sandbox Code Playgroud)
这打印"null".我究竟做错了什么?我知道该方法有效,因为如果我使用
System.out.println(Transpose.halfStepUp("c"));
Run Code Online (Sandbox Code Playgroud)
它工作正常.解决方案可能很容易,但在寻求帮助时我无法找到一个好的方法.再次感谢您的阅读,我们非常感谢您的回答!