标题:小菜鸟从HW学期第8天。。让equals和new sting困扰。。汗
只看楼主
ccnjava
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-7-13
 问题点数:0 回复次数:8 
小菜鸟从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 困扰 
2004-08-09 09:35
Anstey
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2004-4-14
得分:0 

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!!!


Anstey. Cheers. I love CAPPUCCINO~~
2004-08-09 15:06
ccnjava
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-7-13
得分:0 
呵呵

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

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

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


特此感谢三位版主对小菜鸟长期以来的帮助 他们是 jellen(类痴狂人 ) tempnetbar(J湖散人 )和Anstey (排名不分先后) 呵呵,这些日子让小菜鸟受益非浅。 忠心的谢谢您们!
2004-08-09 15:36
ccnjava
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-7-13
得分:0 

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

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

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

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

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

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

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

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

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

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

聪明的读者,你知道吗?


特此感谢三位版主对小菜鸟长期以来的帮助 他们是 jellen(类痴狂人 ) tempnetbar(J湖散人 )和Anstey (排名不分先后) 呵呵,这些日子让小菜鸟受益非浅。 忠心的谢谢您们!
2004-08-09 16:38
tempnetbar
Rank: 2
等 级:新手上路
威 望:4
帖 子:582
专家分:4
注 册:2004-5-5
得分:0 

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


相信勤能补拙! 喜欢用好用的就永远学不到有用的。
2004-08-09 18:27
ccnjava
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-7-13
得分:0 
聪明

厉害。。。答对了

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

2那女的用假肢

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


特此感谢三位版主对小菜鸟长期以来的帮助 他们是 jellen(类痴狂人 ) tempnetbar(J湖散人 )和Anstey (排名不分先后) 呵呵,这些日子让小菜鸟受益非浅。 忠心的谢谢您们!
2004-08-09 19:11
tempnetbar
Rank: 2
等 级:新手上路
威 望:4
帖 子:582
专家分:4
注 册:2004-5-5
得分:0 
因为她的浓妆艳抹和透明的指甲油极不相称,呵呵,不过应该谁都会想到的吧,呵呵,没什么厉害的

相信勤能补拙! 喜欢用好用的就永远学不到有用的。
2004-08-09 20:26
ccnjava
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2004-7-13
得分:0 
我想歪了

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

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

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


特此感谢三位版主对小菜鸟长期以来的帮助 他们是 jellen(类痴狂人 ) tempnetbar(J湖散人 )和Anstey (排名不分先后) 呵呵,这些日子让小菜鸟受益非浅。 忠心的谢谢您们!
2004-08-10 08:55
Dido
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2004-6-22
得分:0 

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

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


/UploadFile/2004-8/200482604536523.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://bbs./UploadFile/2004-8/200482604536523.gif');}" onmousewheel="return imgzoom(this);" alt="" /> [url]http://holaeurope.[/url] /UploadFile/2004-6/200461618412471.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://bbs./UploadFile/2004-6/200461618412471.gif');}" onmousewheel="return imgzoom(this);" alt="" /> http://javastudy.
2004-09-05 00:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-4033-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023149 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved