有点面向对象基础的都应该知道不能 == String 是个类。又不是基本数据类型 int char 什么的
a loss in 30 mins of 500 what? usd??!!我还觉得MS系列方法名大写开头才没人性,每次.完之后还要我同时按shift,每天让我多消耗N卡路里的能量和无数ms工作时间。 别告诉我可以popup选择你所有的东西都靠选,有把手移来移去的功夫,好几个字都打号了,况且早期VS.NET笨得要死,BUG多多。说多了,浪费口水。我知道你的感受就像我在写.net的时候一样,但是忠告lzWhen in Rome do as the Romans do
===============
我们的理解没有问题,我们的理解都是人类正常的理解。所以,MFC中的CString的==就是比较内容。面向对象开发,分为三种层次。1 基于对象 VB
2 面向对象 java
3 完全对象 还没有为什么还没有,用==去比较引用,这是违反面向对象原则的。
一个字符串或者一只狗,有引用进行比较的概念吗?把这个如此不符合oo思想的东西放到如此重要的位置,简直是对"java是完全Oo"的蔑视,
也是自我嘲笑。
強烈同意!!!!!
这样哗众取宠的标题实在不是技术人员应该有的态度,更适合出现在猫扑或天涯bt有理,yy无罪
強烈同意!!!!!
但是crs.getString()是生成的字符,应该使用equals
一个字符串或者一只狗,有引用进行比较的概念吗?说什么java是完全oo的语言,那只不过是表面现象。
我不就是不小心内存泄漏了外加引用了个野指针嘛,人性化点告诉我一声:hi,兄弟,这里内存处理有问题。这不就得了?
还非要搞到我系统崩溃死机,真太没人性了吧?垃圾!!!!=========割=========生不出孩子不要怪炕不平
拉不出屎不要怪马桶没吸力
C#就可以对string == 比较值,多好!
从C转JAVA或从JAVA转C的多了去了,也没见多少人在这抱怨,用一个工具(不管是自愿还是强迫)就要接受它的特点
别告诉我可以popup选择你所有的东西都靠选,有把手移来移去的功夫,好几个字都打号了,况且早期VS.NET笨得要死,BUG多多。说多了,浪费口水。我知道你的感受就像我在写.net的时候一样,但是忠告lzWhen in Rome do as the Romans do
----------------------------------------------兄弟现在很少用.net吧﹐其实不需要大写呀﹐它能自动识别的。
C#就可以对string == 比较值,多好!
======================================
我还没用过c#,听这位朋友这么说,果然ms在新版本里继续进行人性化处理!而Java,如果有末日的一天,就是失败在只提供海量丰富的功能,但是却没有人性。
===============================================
用==去比较2个实体的内存地址,这是面向对象的思想吗? 绝对不是。很多个人写的实用类还懂得去重载操作符,以实现oo操作,怎么一个小小的字符串比较,还得让我去调用equal?
我刚开始写C#的时候,学都没学,上去就按java的方式写了,
有段程序要比较引用的,差点没把我给逼疯,一直骂变态的C#
我早上出门看见一只大黄狗,我帮你改名叫狗,请问 你==早上那只大黄狗 ?
rect1==rect2就可以比较这2个矩形是否是完全重合的矩形
c#也可以用rect1==rect2来进行比较。 java中, rect1==rect2,只能比较2个矩形的引用,当然是不可能相同的,太惨了。
在游戏世界中,只有矩形的位置和大小,而没有什么引用和内存地址,现实世界中也没有。
某人 取名 甲 别名 小甲
当你对他叫 甲 或 小甲 时 他都会回应你,但是“甲”或“小甲”在你叫他的那个情景下才代表那个人。
至于你说的c++和C#中, CRect rect1,rect2;正是比较的两个对象,java中, rect1==rect2比较的也是rect1,rect2是否指向同一对象。
String str1 //str1表示一个变量,类型为String ,str1是存放在栈中的,对象则存放在堆中。
”abc“//是字符串池中的,当str1 =”abc“是将它从池中拷贝过来。它没有应用指向也不是对象
用人家的就学人家的咯!
?
有段程序要比较引用的,差点没把我给逼疯,一直骂变态的C#
=====================
你讲讲吧。看看如何。-------------------------------------------------------还有什么好讲的,C#中==也不一定就是比值。java里面没有重载运算符,==只能有一个意思。至于说==的意义是比较值好,还是比较引用好,我觉得每个人都有先入为主的感觉。
不能绝对的说就是哪个有意义。
应该用 String.equals()方法啊。
用str1.equals("abc")啊
===========================================
懂,谁都懂,我之前也知道这个事项,
比如c里面 空指针不能->操作,谁都懂,但是仍旧有大量的那种错误,因为复杂的或者因为忙乱的。java去掉了指针,却又引入==这个更危险的错误的地方。
指针错误可能会导致程序崩溃,而==造成的逻辑错误能让你人死了都不知道怎么死的。
=================当然是以人为本了。任何人学习程序设计之前都是不懂程序设计的。string a=new string("abc");
string b=new string("abc");
让不懂程序设计的人去思考a跟b是否相等,估计99%的人都认为是相等的。既然所有的人都是从入门开始的,那么为什么java要给所有的人设置一个障碍?难道只是为了他设计一门语言方便? 难道只是为了让他更体现自己的高明?MS跟sun相反,恰恰是牺牲自己的名誉来换取客户的方便。
另外,他犯了错,我还不能在遥远的地球对面吆喝一声?
骂MS的人那么多,我骂一下java,我就成了把自己的错误推到别人身上了?说我把自己的错误退到别人身上的思想 酸,真酸。
为什么要把责任推给java呢!?
但是,等语言实现者发现==比较字符串的引用会导致几乎每个java使用者都会犯错的时候,
项目已经无法修改了,也就只能如此了。
---------------------------------------------------------------------------------------
楼主,我觉得你这句话说的没错。 对于字符串来说,绝大多数情况下是要比较内容而不是引用,我也觉得当初如果==对于字符串特殊处理一下可能用起来更方便一点儿。但是你也应该考虑一下历史因素,java语言是15年之前设计的,设计他的人也不是神仙,怎么可能是完美无缺的呢,有点儿不方便而的地方也是正常的。而且我觉得java语言把程序员从手工内容管理中解放出来了,光是这一点就功德无量啊,就算有点儿别的小毛病我也可以忍受。
至于C#之类的新语言,设计的时候都已经是java诞生之后好几年了。它们继承java的优点并作出一些改进那是很正常的事情,如果比java一点儿进步都没有,那这些语言的设计者简直是白痴。总之,楼主我觉得你关于String的==的观点没错,但是对java语言设计者的批评不太公平,另外这种对待问题的态度也不太有建设性。
String类型的== 和 equals的比较
看到你这个帖子我情不自禁的笑了
太开心了!
终于有比我还菜的人了!
忍不住想提笔写个帖子教教你
可是往下一看
牛人大虾们的帖子已经种满了这个园子
在CSDN这么大块菜地上
以你学两天JAVA的水平
写出来的帖子
还能引起如此多人的关注
真是不容易啊!
我要赶紧加油咯
不能让你超过了我
希望以后你发帖子能有指导你的机会
Python和Ruby也有Hash值一说,也有Equal一类的方法,但是字符串可以用==号比较.C++这么在乎内存的语言...但是
CString和string,bstr_t... ...都支持==java.lang.String装什么底层啊?
我也上过这个当,哈哈
书1.书名==书2.书名;书1.作者==书2.作者.......
书1.equals(书2)==true;
书1!=书2;
因为我如果把我那本书(书1)撕破了,我同学的书(书2)却不会破;
即使内容完全相同的两个对象,也会有各自的改变,改变后就会不同,所以==应该比较引用,而内容应该用equals比较,这才是OOP,内容不代表对象的全部
世界上有那么多一样的东西,难道他们都相等(==)吗?