String s1 = new String("anil");
String s2 = s1.toUpperCase();
String s3 = s1.toLowerCase();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
如果在堆中创建的字符串对象则都为false。但它给出false,true。
答案 0 :(得分:3)
String s1 = new String("anil");
此语句创建一个新对象
而且,
String s3 = s1.toLowerCase();
指出第一个对象s1
这就是你得到true
第二个条件的原因
另请参阅how java handles strings以获得清晰的理解
希望这会有所帮助!!
答案 1 :(得分:1)
这里有四个 String对象:
通过==运算符,它们中没有两个是相同的。
除 外,toLowerCase()可能会返回相同的对象(如果它已经是小写)。 Javadoc中没有任何内容,因此不能依赖于实现中的任何此类行为。
答案 2 :(得分:0)
这里将在堆中创建S1对象。其值存储在常量字符串池中。
S2是字符串文字而不是对象。因此,第一个JVM将检查字符串是否在常量池中。如果String有常量池,则不会创建新对象。它将返回可用对象的引用。
这里s1.toUpper将返回" ANIL"。 " ANIL"不在常数池中。所以将创建新对象。并将其与s1进行比较(使用' ==')给出错误。
S3同样如此。但是对于S3来说,它不会创造出新的对象,因为它不会像#34; anil"已经在恒定的池中。 所以将返回S1的参考。所以它给出了真实。
研究以下链接
答案 3 :(得分:0)
如果你看一下String类中的toLowerCase()方法。
toLowerCase(Locale locale)
toLowerCase(Locale locale)
使用Character.toLowerCase(c)
Character.toLowerCase(c)
有此注释 -
答案 4 :(得分:0)
案例1 字符串Capital First Letter
。
> String s1 = new String("Ajay")
String s2 = s1.toUpperCase()
String s3 = s1.toLowerCase()
System.out.println s1 == s2
System.out.println s1 == s3
false
false
案例2 字符串Small First Letter
。
> String s1 = new String("ajay")
String s2 = s1.toUpperCase()
String s3 = s1.toLowerCase()
System.out.println s1 == s2
System.out.println s1 == s3
false
true
案例1 中的,因为字符串有大写字母,转换为小写会产生新对象,因此会有新参考>> 案例2 小首字母转换为小写后仍会指向同一个对象,因为原始对象相同因此创建两个对同一对象的引用。
您可以看到Groovy Shell
的输出非常明确。