当前位置: 代码迷 >> Java相关 >> 小菜鸟从HW学期第8天。。让equals和new sting困扰。。汗
  详细解决方案

小菜鸟从HW学期第8天。。让equals和new sting困扰。。汗

热度:334   发布时间:2004-08-09 09:35:00.0
小菜鸟从HW学期第8天。。让equals和new sting困扰。。汗

Q1:比如这个 //1 Stirng s="aaaa"; //2 System.out.println(s); //3 s=new String("bbbb"); //4 System.out.print("s"); 那么是不是说以2行以前输出的是aaaa,而3行以后s被重新定义了/ 以后的s全不输出的就是bbbb了。 那new String作用只有从新赋值?我本以为只有从新赋值,但我看到Q2才问的。 问题很简单但有些东西不敢肯定,呵呵。

Q2:有两个例子 String s1,s2; s1=new String("Hello!"); 1: s2=new String("Hello!"); System.out.println("\ts1==s2->"+(s1==s2)); ---------------------------- String s1,s2; 2: s1="Hello!"; s2="Hello!"; System.out.println("\ts1==s2->"+(s1==s2));

按照我的理解,声明两个字符串,那么第一个第二个的值都一样,s1==s2 应该是true,可是。。 问的是,第一个例子输出是false,第二个例子输出是true。 这两个的区别紧紧是第一个多了new String。 这个new String是做什么用的?

另外书上后面写了一个equals的方法. String s1,s2; s1="Hello!"; s2="Hello!"; System.out.println("\ts1.equals(s2)="+s1.equals(s2)); 答案是true。书上说equals是比较两个字符串内容的。我能理解。 那么不加equals是表示什么的?

问题很简单。。。小菜鸟也去看过api文档。。。但是凭我有限的英文水平。。 看了半天没看明白。。 麻烦个人大人看看。。。感激不仅。。。

搜索更多相关的解决方案: sting  equals  小菜  new  困扰  

----------------解决方案--------------------------------------------------------

String 是一个很特殊的object, 而你的这个问题又是特殊里的特殊.

我们平常建立一个新的object的时候,用的是ClassName instanceName = new ClassName(parameters);

String这个class很特殊,因为String太经常使用,所以我们建立String object的时候,"简略"为String name = "something";

注意,这里,JAVA compiler其实是相当于String name = new String("something");记着,每当一个new自出现,就是建立了一个新的memory address来store这个variable 或者object.

现在回到你的例子,Q1简单明了,因为都有new,所以s1 s2被存在了不同的memory address,而==比较的是memory 的refrence,因此,s1==s2 是false(不同的memory address).

Q2是一个很特殊的例子,特别是对刚刚接触==和equal的人们来说,在这个列子里s1 = "hello"; 到这里,compiler还是和原来一样,建立了一块新的memory address给s1, 但是,当执行到s2的时候,compiler发现s2的内容和s1 一样,因此,compiler 不会建立一个新的memory address给s2,而是,把s2 直接refer到s1的memory address,画图出来就是s1 s2指向的是同一个memory address,唯一的原因,就是他们的内容不同,这是唯一的原因他们的reference address是相同的.

不知道我是不是把问题越搞越复杂,但是,记住==比较的是refrence,而equals比较的是储存的value;

eg

String s1 = new String("Anstey");

String s2 = new String("Anstey");

System.out.println(s1==s2); //false;

System.out.println(s1.equals(s2)); // this is absolutely true!!!


----------------解决方案--------------------------------------------------------
呵呵

谢谢您,其实老麻烦您们真的很过意不去

如果以后有什么力所能及的事情,您们尽情吩咐。

我换新头像了耶~草纸。版主的头像好有个性啊。。。


----------------解决方案--------------------------------------------------------

谢谢版主您详细的解答。我现在感觉到,在java中每一个小问题 都能引出很多知识点,现在小菜鸟越来越觉得java复杂深奥了,呵呵

版主们无私的帮助小菜鸟回答。小菜鸟却没有什么事可以为版主门做 真是惭愧。

版主门辛苦了,我这里有个破案得题目,版主门弱有兴趣看看,当做休息一下也好 呵呵,大家看看猜得到答案不。

米高是一名私家侦探,这天的傍晚,他一个人到酒吧喝酒。

他的目光,很快被坐在隔邻的一个漂亮女子所吸引,这个女子大约二十五六岁,打扮入时,化了很浓的妆,而且手指甲上涂了透明的指甲油,独自在喝酒。

米高觉得这个女人似曾相识,但又记不起是谁。直至那个女人离开座位,米高才突然记起这女人名叫苏 珊,是个诈骗犯,正被警方悬赏通缉。 米高立即起身追出去,但那苏珊己无踪影。 米高于是向警方报案。

警察到场以后,立即展开了调查, 他们把女子喝酒的酒杯加以检验,但是,上面竟然没有留下指纹。

"奇怪,那个女犯喝酒时戴着手套吗?"警察问道。

"不,她没有戴手套,而且,也不似贴上了胶纸那一类的东西。"米高回答说。

"那到底是怎么一回事呢?"警察迷惑地自言自语。

聪明的读者,你知道吗?


----------------解决方案--------------------------------------------------------

8会是透明的指甲油吧?呵呵


----------------解决方案--------------------------------------------------------
聪明

厉害。。。答对了

我当时的答案是。。1那女的用吸管和的啤酒

2那女的用假肢

给我朋友差点气晕过去呵呵


----------------解决方案--------------------------------------------------------
因为她的浓妆艳抹和透明的指甲油极不相称,呵呵,不过应该谁都会想到的吧,呵呵,没什么厉害的
----------------解决方案--------------------------------------------------------
我想歪了

我想的是开始一大堆描述都是诱惑人的,是陷阱。。。

就是让人忘这里想,答案一定在后面。。或者答案是隐藏的。

所以我答出了以上答案。。。呵呵


----------------解决方案--------------------------------------------------------

真有意思 我越来越喜欢这个地方了

我也要加入你们的队伍 来丰富自己的Java方面的知识 hoho


----------------解决方案--------------------------------------------------------
  相关解决方案