public class Test
{
public static void main(String args[])
{
String a="meow";
String b=a+"deal";
String c="meowdeal";
System.out.println(b==c);
}
}
根据我==运算符比较参考。所以b == c应打印" true" 但是它打印出了“假”和#34; 。我通过打印" b"和" c"的哈希码进行检查。 。
两者的哈希码相同
答案 0 :(得分:1)
union pun_unsigned {
unsigned char c[sizeof(uint64_t)];
uint16_t u16;
uint32_t u32;
uint64_t u64;
};
会比较引用,但对==
和b
的引用不同 - 它们是两个不同的c
个实例,尽管它们包含相同的内容。
如果您想比较两个字符串的内容,请使用String
。
答案 1 :(得分:1)
根据我==运算符比较参考。
这是正确的。如果两个操作数都是引用类型,则==
运算符会比较引用。 (如果任一操作数是基本类型,则不正确......但这是一个不同的主题。)
所以b == c应该打印“true”但它打印“false”。我通过打印哈希码“b”和“c”来检查。
您的推理不正确。
String a = "meow";
String b = a + "deal";
String c = "meowdeal";
实际上,当代码完成b
并且c
引用具有相同值的不同字符串对象时。实际上,JLS声明+
运算符创建了一个新的字符串objext ... ,除非表达式是一个常量表达式。 (在这种情况下,它不符合常量表达式,因为a
是变量。)
所以b == c
是false
...因为==
正在比较参考文献,参考文献是不同的。
答案 2 :(得分:0)
您应该将let tabItem = UITabBarItem()
tabItem.title = "Tab1"
tabItem.selectedImage = nil
tabItem.image = nil
tabViewController?.tabBarItem = tabItem
用于对象,将b.equals(c)
用于基本类型