为什么是false呢?在C++,VB,DELPHI,C#,应该都是true; String a = "ABC"; String b="AB"; String c=b+"C"; System.out.println(a==c); //为什么是false呢?在C++,VB,DELPHI,C#,应该都是true; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其他那些乱七八糟的我不知道!!JAVA里就是false “==”比较的是内存地址,equals()比较的才是值 ==比较内存地址如果改成String c="AB"+"C"; System.out.println(a==c);则结果是true,因为字符串常量池的原因。"AB"+"C"属于字符串常量连接,会调用String.intern方法使用字符串常量池 ==比较的地址a.equals(c) 才是比较的字符串 在java object类中"=="、和equeals()都是比的内存地址,但是String类中不是,原因是String类重写了equals()和hashCode(); 在String类中"=="比的还是内存地址,但String比的则是指。 因为JAVA里面string 不是原始数据类型,而是对象,其他语言应该是原始数据类型 String c = "A"+"BC";这样就会是true了 了解 ? String c=b+"C"; 中b为变量,所以c也是变量,所以为falseString c=“a”+"C";的话c肯定为常量就相等了 这个是正解,建议仔细看看。在JAVA中字符串常量池是个很有特色的思想。 String这个类已经重写了equals这个方法了 C#里确实是 trueC# 中 string 类的 == 运算符重载了 用==比较string类型,比较的是内存地址。要比较内容相等要用equals 在C#中,不但楼主的代码是 true,而且string str1 = new String("a");string str2 = new String("a");str1 == str2 也会得到 true因为在C#中,已经对字符串的相等运算符进行了重载 有通用编程语言的string是原始数据类型吗? 你可以研究下JAVA中堆内存和栈内存的区别 String c=b+"C"; 运行这句的时候产生了一个新对象。 如果把你的代码改为 String a = "ABC"; String b = "AB"; String c= "AB" + "C"; System.out.println(a==c); 结果是true 因为c ="AB" +"C"时,并没有产生新对象。这个问题没必要钻牛角尖。记得java比较字符串用equals就行了。java的==号比较的是内存地址。 即,看2个对象是不是同一个对象。 java编写的多个applet怎么样整合在一起 新手菜鸟 关于三目运算 nutch9.0 windows 如何增量索引 常量的转化 SCWCD 证书怎么样?有必要考吗? 关于修改properties文件的问题:怎样写回原properties文件,先谢了 请哪位高手给我举个构造函数的例子啊!感激不尽!!! 简单问题:swing中怎么把窗口最大化的按钮禁用 怎么获得系统日期 $$$ 美国公司高薪聘请 ORACLE + JAVA 程序经理和 开发者 请推荐一个软件开发方面的培训计划吧 Junit下的try/catch取值!
如果改成
String c="AB"+"C";
System.out.println(a==c);
则结果是true,因为字符串常量池的原因。"AB"+"C"属于字符串常量连接,会调用String.intern方法使用字符串常量池
这个是正解,建议仔细看看。在JAVA中字符串常量池是个很有特色的思想。
C# 中 string 类的 == 运算符重载了
在C#中,不但楼主的代码是 true,而且
string str1 = new String("a");
string str2 = new String("a");
str1 == str2 也会得到 true因为在C#中,已经对字符串的相等运算符进行了重载
有通用编程语言的string是原始数据类型吗?
如果把你的代码改为
String a = "ABC";
String b = "AB";
String c= "AB" + "C";
System.out.println(a==c);
结果是true 因为c ="AB" +"C"时,并没有产生新对象。这个问题没必要钻牛角尖。记得java比较字符串用equals就行了。java的==号比较的是内存地址。 即,看2个对象是不是同一个对象。