String的==和equals()方法的区别 str,str1均是“ABC"的引用。str==str1是判断这两个引用是否相同。(即他们指向的地址是否相同)而str.equals(str1)则是判断他们指向的值是否相同。故不论以那种方式初始化。str.equal(str1)总是true; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用==比较的是地址,用.equals比较的是值。用new会预先分配地址空间,而赋值则不会 ==用来判断两个对象的指针是否相等,而。equals(Object )用来判断两对象的内容是否相等(即对象的类型、成员变量)String类维护这一个静态的字符串列表,所以:str。intern()==str1。intern(); 刚看万think in java 说“==”是比较实例的reference ,这个中文意思我也不太懂,“.equal”是可以复写的类,缺省情况下也是比较referencenew 是分配了内存空间,跟String的付值不一样String str = "ABC"; str1 = "ABC";是比较他们的值吧?个人见解,不知错多少《------仁者见仁,智者见智-----〉 依我的个人意见:楼主说的那种情况,用String str="ABC";与String strl=new String("ABC");对str与strl来说反回的值均为引用,即字符串的地址,但是后者加了new关键字,表示新开辟内存空间,也就是第二个字符串与第一个不在同一地址范围内,用str==strl来比较时比较的为二者的引用,即地址,自然结果为false,而用str.equals(strl)比较的为二者之值,自然结果相同,反回值为true。此为小弟的个人意见,望高手指给以指证,小弟谢过!!!1 在JAVA语言中,String xx="abc" 也是一个对象,JAVA自动帮你分配内存,如果你再次 String xxx="abc",那么xx 和xxx指向同一个对象"abc",== 是判断 xx和xxx是否指向同一个内存.equals是判断 xx和xxx指向的两块内存中的内容是否一致gl to MASTERPROSER(编程在西元前) reference就是引用啦楼主的问题大家都回答了 如果要比较2个string,用equals()或者用==前加上intern()字符串回扣函数 new 会在你的内存中开辟新的空间,而=不会,会先在内存中找是否有“ABC”,如果有直接指向这个内存块,没有才开辟空间,所以你的问题很好理解了! 答案如下: 方法1生成的对象在内存中有且只有一份,在用发放1生成同样的字符串,会把已有地址直接赋给变量使用。如 String str1="ABC"; String str2="ABC"; 相当于 str2=str1; 方法2没调用一次,就会产生一个新的内存对象。也就是说和方法1使用了不同的内存。 .equals 缺省是以object reference 比较,但一般类的实现都是比较object reference 所对应内存中的值是否相等。 上面各位讲的都很有理,通俗一点来说,==比较的是两个对象是否相同,从上面来看显然是两个String对象,返回的只能是false。.equals比较的是String对象中字符串是否相同。可以改写方法实现特殊要求的比较。 java会在内存中创建一个String的池,用于放所有的String,但是创建相同内容的字符串,通常系统会检查池里面是否有相同的串,有就直接使用已有的串,不再新建。但是用new的话,就永远都新建一个串。String s1 = "ABC"; //创建一个ABCString s2 = "ABC"; //共用s1的ABCString s3 = new String("ABC"); //再创建一个ABC上面语句在池里面建立两个ABC,s1和s2指向同一个ABC,s3指向另外一个。==是判断引用是否相同,equals是判断对象的内容是否相同。接上面s1 == s2; // 注意这里为true;s1 == s3; // false;s1.equals(s2); //true;s1.equals(s3); //true 用String str1="ABC";声明的时候,会先检查内存区是否已有"ABC"这个常量是否存在而用new 时则直接创建一个新的String 还有String s1 = "ABC"; //新创建一个ABCString s2 = "ABC"; //指向s1String s3 = new String("ABC"); //新建立一个ABCString s4 = "abc"; //新建一个abc 谢谢各位的解答,我已经理解这个问题的原因了:关键在于申明String的变量时,Java会先找一下是否已经有这个值,如果有不分配新的空间. java 运算符左移<<与右移>>是否可逆 生产者与消费者问题,wait与notify多线程协作出问题,请大家帮我纠正下。 通用接口:根据XML操作类型和SQL语句返回数据 问个简单的正则,在线等,马上结贴,谢谢 一个初学者的简单问题.... 关于java.io.*;的问题,帮忙看一下,谢了 JFrame中jComboBox的一个问题 这样连库为什么不行? jni的基础问题,在线等 设置JDialog的MaxSize 怎么把一个16进制的数用java转换成相对应字符(在线揭贴) 网上有用java写的系统监控程序么?
(即对象的类型、成员变量)
String类维护这一个静态的字符串列表,所以:str。intern()==str1。intern();
说“==”是比较实例的reference ,这个中文意思我也不太懂,
“.equal”是可以复写的类,缺省情况下也是比较reference
new 是分配了内存空间,跟String的付值不一样String str = "ABC";
str1 = "ABC";
是比较他们的值吧?
个人见解,不知错多少《------仁者见仁,智者见智-----〉
楼主说的那种情况,用String str="ABC";与String strl=new String("ABC");对str与strl来说反回的值均为引用,即字符串的地址,但是后者加了new关键字,表示新开辟内存空间,也就是第二个字符串与第一个不在同一地址范围内,用str==strl来比较时比较的为二者的引用,即地址,自然结果为false,而用str.equals(strl)比较的为二者之值,自然结果相同,反回值为true。此为小弟的个人意见,望高手指给以指证,小弟谢过!!!1
如果你再次 String xxx="abc",那么xx 和xxx指向同一个对象"abc",
== 是判断 xx和xxx是否指向同一个内存
.equals是判断 xx和xxx指向的两块内存中的内容是否一致gl
reference就是引用啦
楼主的问题大家都回答了
或者用==前加上intern()字符串回扣函数
方法1生成的对象在内存中有且只有一份,在用发放1生成同样的字符串,会把已有地址直接赋给变量使用。如 String str1="ABC"; String str2="ABC"; 相当于 str2=str1;
方法2没调用一次,就会产生一个新的内存对象。也就是说和方法1使用了不同的内存。 .equals 缺省是以object reference 比较,但一般类的实现都是比较object reference 所对应内存中的值是否相等。
通常系统会检查池里面是否有相同的串,有就直接使用已有的串,不再新建。
但是用new的话,就永远都新建一个串。String s1 = "ABC"; //创建一个ABC
String s2 = "ABC"; //共用s1的ABC
String s3 = new String("ABC"); //再创建一个ABC
上面语句在池里面建立两个ABC,s1和s2指向同一个ABC,s3指向另外一个。==是判断引用是否相同,equals是判断对象的内容是否相同。接上面
s1 == s2; // 注意这里为true;
s1 == s3; // false;
s1.equals(s2); //true;
s1.equals(s3); //true
而用new 时则直接创建一个新的String
String s1 = "ABC"; //新创建一个ABC
String s2 = "ABC"; //指向s1
String s3 = new String("ABC"); //新建立一个ABC
String s4 = "abc"; //新建一个abc