csdn中 最简单的问题,大家帮忙啊~~~~!!!!!! String s1 = "asdf";String s2 = "asdf";s1==s2; 为什么是flase???他们不是指向同一地址? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个这个还用问吗??指向地址不同。当然false. 当建立s2的时候,发现内存中有"asdf",s2不就应该 也指向他么? S1 和 S2 是两个对象。S1 所指的 ASDF 和 S2 所指的 ASDF 是不一样的它们是两块不同的区域。 String s1时,系统会在栈内存中创建一个 s1引用,而实际的内容则保留在内存的堆里String s2时,则是创建另外一个引用String s1==s2只是比较两个对象的引用地址,显然他们两个的引用地址不同,所以不等 肯定是true 如果 是String s1 = new String("asdf"); String s2 = new String("asdf");这样 s1 == s2就是false 直接 用 String s1 ="asdf" 这种形式 s1对象是放在常量池中的 当s2 发现常量池中有一个"asdf"对象是就不会在去创建一个新的对象而 String s2 = new String("asdf"); 这种形式是在堆中开辟的内存.所以创建的是两个不同的对象. 试了一下,答案是true。用new String()才会创建String对象,而直接使用String 定义相同的字符串指向同一对象,不知道java编译器是怎么区分s1和s2是相同的内容,挺奇怪的 楼主是TRUE啊 貌似是String a = new String("asdf"); String b = new String("asdf"); a == b;这个才是false吧? 指向同一地址!对象不同???在String池里不就是只创建了一个"asdf"吗?我觉得就是同一对象! 如果用对象赋值,那么就指向的是同一个内存空间,如果是单独的重定义一个对象,那么,只能是值相等,而内存空间是重新分配的.例:String a="abcd";String b="abcd";//b和a的值相等,但是占有不同的内存空间.String c=a;//c和a的值相等,并且引用了用以内存空间.我也初学,希望可以帮到你.... String a = new String("asdf"); String b = new String("asdf"); a == b; 这个是trueString s1 = "asdf"; String s2 = "asdf"; s1==s2; false支持8楼说法,,,-----------楼主结贴吧,, 谢谢大家,我知道我怎么错了,我写出来,希望大家不要和我一样。class wrenwren { public static void main(String args[]) { String a = "cc"; String b = "cc"; System.out.println("a==b"+a==b); }}我是这样验证的,结果既不是a==btrue,也不是a==bflase。而是false,看了结果,我都没考虑a==b哪去了,就来这里问,实在不好意思。 大家没事到我的博客上看一下,http://i.cn.yahoo.com/05654311083谢谢支持! http://www.japee.com.cn/jew/pages/Main.aspx 用算法实现下面这个程序, 问个this的问题 JAVA学习的人都来帮帮我 时间格式的转化遇到的问题,请指点 eclipse启动时报错的问题 新手求教!怎样读取一个文件夹里所有文件的名字 java 正式表达式问题? 请问JAVA网格控件是哪个? 有没有好点的登陆框架啊!~~~~~~~~~~ String temp = System.getProperty("pmIndex")的问题 求指点 有谁对类的生命周期理解的比较透彻呢 想让大家帮忙看个程序
指向地址不同。当然false.
当建立s2的时候,发现内存中有"asdf",s2不就应该 也指向他么?
String s2时,则是创建另外一个引用
String s1==s2只是比较两个对象的引用地址,显然他们两个的引用地址不同,所以不等
String s1 = new String("asdf");
String s2 = new String("asdf");
这样 s1 == s2
就是false 直接 用 String s1 ="asdf" 这种形式 s1对象是放在常量池中的
当s2 发现常量池中有一个"asdf"对象是就不会在去创建一个新的对象
而 String s2 = new String("asdf"); 这种形式是在堆中开辟的
内存.所以创建的是两个不同的对象.
貌似是String a = new String("asdf"); String b = new String("asdf"); a == b;这个才是false吧?
例:String a="abcd";
String b="abcd";//b和a的值相等,但是占有不同的内存空间.
String c=a;//c和a的值相等,并且引用了用以内存空间.我也初学,希望可以帮到你....
String s1 = "asdf"; String s2 = "asdf"; s1==s2; false
支持8楼说法,,,
-----------楼主结贴吧,,
class wrenwren {
public static void main(String args[])
{
String a = "cc";
String b = "cc";
System.out.println("a==b"+a==b);
}
}
我是这样验证的,结果既不是a==btrue,也不是a==bflase。
而是false,看了结果,我都没考虑a==b哪去了,就来这里问,实在不好意思。