String str1=rs.getstring(1) 这个时候 str1是 abc的str1=="abc" 却返回假。我知道在Java里==比较的是引用, 但是这个特性太没有人性,太变态。

解决方案 »

  1.   

    同情楼主,但这与变态无关。以前我们的理解有问题,现在java改过来反而不习惯了。
      

  2.   

    我也上过这样的,几乎搞JAVA的每个人都上过这样的当。不过我现在关心的是怎么跟钱扯上关系了
      

  3.   

    ==不能直接进行值比较,的确让人感觉不爽。因这个怪java变态,说楼主基础知识不过关;因这个赔钱,呵呵,楼主变态了!
      

  4.   

    既然人人都上过这种当。就是语言的设计者太没有人性。这也是java.String 打不过ms.CString的原因。
      

  5.   

    同情楼主,但这与变态无关。以前我们的理解有问题,现在java改过来反而不习惯了。
    ===============
    我们的理解没有问题,我们的理解都是人类正常的理解。所以,MFC中的CString的==就是比较内容。面向对象开发,分为三种层次。1 基于对象 VB
    2 面向对象 java
    3 完全对象 还没有为什么还没有,用==去比较引用,这是违反面向对象原则的。
    一个字符串或者一只狗,有引用进行比较的概念吗?把这个如此不符合oo思想的东西放到如此重要的位置,简直是对"java是完全Oo"的蔑视,
    也是自我嘲笑。
      

  6.   

    == 比较的是地址,equals比较的是值,所以返回值是false
      

  7.   

    killme2008(为了生态平衡,请保护蛤蟆) 
    強烈同意!!!!!
      

  8.   

    自己基础不牢固
    这样哗众取宠的标题实在不是技术人员应该有的态度,更适合出现在猫扑或天涯bt有理,yy无罪
      

  9.   

    killme2008(为了生态平衡,请保护蛤蟆) 
    強烈同意!!!!!
      

  10.   

    ==在静态字面值的时候,由于JVM做了优化是比较值.
    但是crs.getString()是生成的字符,应该使用equals
      

  11.   

    我们的理解没有问题,我们的理解都是人类正常的理解。用==去比较引用,这是违反面向对象原则的。
    一个字符串或者一只狗,有引用进行比较的概念吗?说什么java是完全oo的语言,那只不过是表面现象。
      

  12.   

    现在的"常"就是java在一些地方没有考虑人类的感受,也许它考虑的却是是咖啡的感受
      

  13.   

    c的太没有人性太变态的败笔害苦了我。
    我不就是不小心内存泄漏了外加引用了个野指针嘛,人性化点告诉我一声:hi,兄弟,这里内存处理有问题。这不就得了?
    还非要搞到我系统崩溃死机,真太没人性了吧?垃圾!!!!=========割=========生不出孩子不要怪炕不平
    拉不出屎不要怪马桶没吸力
      

  14.   

    相比之下还是人家ms更有人性,要不人家的软件卖的那么好!
    C#就可以对string == 比较值,多好!
      

  15.   

    那叫什么来着,定势思维?
    从C转JAVA或从JAVA转C的多了去了,也没见多少人在这抱怨,用一个工具(不管是自愿还是强迫)就要接受它的特点
      

  16.   

    有点面向对象基础的都应该知道不能 == String 是个类。又不是基本数据类型 int char 什么的
      

  17.   

    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
      

  18.   

    每次.完之后还要我同时按shift
    ----------------------------------------------兄弟现在很少用.net吧﹐其实不需要大写呀﹐它能自动识别的。
      

  19.   

    相比之下还是人家ms更有人性,要不人家的软件卖的那么好!
    C#就可以对string == 比较值,多好!
    ======================================
    我还没用过c#,听这位朋友这么说,果然ms在新版本里继续进行人性化处理!而Java,如果有末日的一天,就是失败在只提供海量丰富的功能,但是却没有人性。
      

  20.   

    楼主还是不要学java了,完全没有面向对象的思想
      

  21.   

    无聊啊,这是语法问题,你自己想当然的用这是错误一,自己写了程序难道不测试的吗?这是错误二,把自己错误竟然说成开发语言的问题,这就是大错特错.自己错了还说别人BT,实在是BT之极
      

  22.   

    哎,这种问题通过自身可以解决的,难道要SUN改变规则...
      

  23.   

    楼主还是不要学java了,完全没有面向对象的思想
    ===============================================
    用==去比较2个实体的内存地址,这是面向对象的思想吗? 绝对不是。很多个人写的实用类还懂得去重载操作符,以实现oo操作,怎么一个小小的字符串比较,还得让我去调用equal?
      

  24.   

    java的开发环境要是能和.net的开发环境相比那java就不值钱了~
      

  25.   

    呵呵,很正常,这不能归结于不人性化,只能怪你思维定势,
    我刚开始写C#的时候,学都没学,上去就按java的方式写了,
    有段程序要比较引用的,差点没把我给逼疯,一直骂变态的C#
      

  26.   

    把自己的事情推到java身上,的确很变态。
      

  27.   

    晕lz就没有OO的基础,回去补补吧
    我早上出门看见一只大黄狗,我帮你改名叫狗,请问 你==早上那只大黄狗 ?
      

  28.   

    游戏开发中:在碰撞检测中,判断两只怪物是否即将相撞,假设包围盒是一个矩形  你是比较这两个矩形的内容是否一样啊,还是比较这2个矩形的内存地址是否一样?luzi495() ,你来说一下。  在c++中, CRect rect1,rect2;
                rect1==rect2就可以比较这2个矩形是否是完全重合的矩形
                c#也可以用rect1==rect2来进行比较。  java中,  rect1==rect2,只能比较2个矩形的引用,当然是不可能相同的,太惨了。
    在游戏世界中,只有矩形的位置和大小,而没有什么引用和内存地址,现实世界中也没有。
      

  29.   

    举个现实中的例子吧
    某人 取名 甲 别名 小甲
    当你对他叫 甲 或 小甲 时 他都会回应你,但是“甲”或“小甲”在你叫他的那个情景下才代表那个人。
    至于你说的c++和C#中, CRect rect1,rect2;正是比较的两个对象,java中,  rect1==rect2比较的也是rect1,rect2是否指向同一对象。
      

  30.   

    有点要补充
    String str1 //str1表示一个变量,类型为String ,str1是存放在栈中的,对象则存放在堆中。
    ”abc“//是字符串池中的,当str1 =”abc“是将它从池中拷贝过来。它没有应用指向也不是对象
      

  31.   

    谁要java不你开发出来的呢,要是的话,想怎么比怎么比.
    用人家的就学人家的咯!
      

  32.   

    回复人:wd_6532(胜败有常) ( 一级(初级)) 信誉:100  2006-11-03 14:27:00  得分:0

    有段程序要比较引用的,差点没把我给逼疯,一直骂变态的C#
    =====================
    你讲讲吧。看看如何。-------------------------------------------------------还有什么好讲的,C#中==也不一定就是比值。java里面没有重载运算符,==只能有一个意思。至于说==的意义是比较值好,还是比较引用好,我觉得每个人都有先入为主的感觉。
    不能绝对的说就是哪个有意义。
      

  33.   

    比较两个String类型,
    应该用 String.equals()方法啊。
      

  34.   

    = =我刚学Java两个星期也明白那不能比较啊
    用str1.equals("abc")啊
      

  35.   

    我也是最近才搞懂的真是辛苦你背了黑我刚学Java两个星期也明白那不能比较啊
    ===========================================
    懂,谁都懂,我之前也知道这个事项,
    比如c里面 空指针不能->操作,谁都懂,但是仍旧有大量的那种错误,因为复杂的或者因为忙乱的。java去掉了指针,却又引入==这个更危险的错误的地方。
    指针错误可能会导致程序崩溃,而==造成的逻辑错误能让你人死了都不知道怎么死的。
      

  36.   

    至于说==的意义是比较值好,还是比较引用好,我觉得每个人都有先入为主的感觉。
    =================当然是以人为本了。任何人学习程序设计之前都是不懂程序设计的。string a=new string("abc");
    string b=new string("abc");
    让不懂程序设计的人去思考a跟b是否相等,估计99%的人都认为是相等的。既然所有的人都是从入门开始的,那么为什么java要给所有的人设置一个障碍?难道只是为了他设计一门语言方便? 难道只是为了让他更体现自己的高明?MS跟sun相反,恰恰是牺牲自己的名誉来换取客户的方便。
      

  37.   

    也许java语言设计者根本没有考虑到==去比较字符串的细节问题,只是在考虑对象的==应该比较引用。但是,等语言实现者发现==比较字符串的引用会导致几乎每个java使用者都会犯错的时候,项目已经无法修改了,也就只能如此了。
    另外,他犯了错,我还不能在遥远的地球对面吆喝一声?
    骂MS的人那么多,我骂一下java,我就成了把自己的错误推到别人身上了?说我把自己的错误退到别人身上的思想 酸,真酸。
      

  38.   

    没人逼你学JAVA,你不学拉倒。
      

  39.   

    楼上的意思是 如果某人在挑Windows的毛病,你就跟他说,没有人逼你用windows,不用拉倒。
      

  40.   

    分明是楼主自己的思想没有转变过来!
    为什么要把责任推给java呢!?
      

  41.   

    也许java语言设计者根本没有考虑到==去比较字符串的细节问题,只是在考虑对象的==应该比较引用。
    但是,等语言实现者发现==比较字符串的引用会导致几乎每个java使用者都会犯错的时候,
    项目已经无法修改了,也就只能如此了。
    ---------------------------------------------------------------------------------------
    楼主,我觉得你这句话说的没错。 对于字符串来说,绝大多数情况下是要比较内容而不是引用,我也觉得当初如果==对于字符串特殊处理一下可能用起来更方便一点儿。但是你也应该考虑一下历史因素,java语言是15年之前设计的,设计他的人也不是神仙,怎么可能是完美无缺的呢,有点儿不方便而的地方也是正常的。而且我觉得java语言把程序员从手工内容管理中解放出来了,光是这一点就功德无量啊,就算有点儿别的小毛病我也可以忍受。
    至于C#之类的新语言,设计的时候都已经是java诞生之后好几年了。它们继承java的优点并作出一些改进那是很正常的事情,如果比java一点儿进步都没有,那这些语言的设计者简直是白痴。总之,楼主我觉得你关于String的==的观点没错,但是对java语言设计者的批评不太公平,另外这种对待问题的态度也不太有建设性。
      

  42.   

    gtlang78(),不是一般人啊,说起来井井有条,而且很有使人折服的色彩。他年纪肯定不轻,他地位肯定不低,他思想肯定丰富。
      

  43.   

    楼主用vb用多了吧,java就是这么设计的,反正我已经习惯成自然了
      

  44.   

    对于字符串确实基本上都是比较内容是否相等。但是我到不觉得java这样设计有什么不妥,String也是类,要按照类来处理,再有就是java不支持操作符重载,总不能让编译器来决定其意义吧。
      

  45.   

    这是新手学JAVA必须关注的问题之一吧。。
    String类型的==  和  equals的比较
      

  46.   

    一般来说==用于比较两个数值  而字符串的比较最好用.equals()方法
      

  47.   

    我才学了3天JAVA
    看到你这个帖子我情不自禁的笑了
    太开心了!
    终于有比我还菜的人了!
    忍不住想提笔写个帖子教教你
    可是往下一看
    牛人大虾们的帖子已经种满了这个园子
    在CSDN这么大块菜地上
    以你学两天JAVA的水平
    写出来的帖子
    还能引起如此多人的关注
    真是不容易啊!
    我要赶紧加油咯
    不能让你超过了我
    希望以后你发帖子能有指导你的机会
      

  48.   

    哈哈,这是Java的高明之处才对吧,连字符串比较都可以继承过来用,不是更高级么,怎么能说变态呢!
      

  49.   

    应该重载==BT不BT都是扯淡,
    Python和Ruby也有Hash值一说,也有Equal一类的方法,但是字符串可以用==号比较.C++这么在乎内存的语言...但是
    CString和string,bstr_t... ...都支持==java.lang.String装什么底层啊? 
      

  50.   

    java.lang.String装什么底层啊? 舒服
      

  51.   

    String是个对象,不是基本数据类型。
    我也上过这个当,哈哈
      

  52.   

    我跟同学去书店各买了一样的书<<JAVA核心技术>>给它们起2个名字:书1,书2
    书1.书名==书2.书名;书1.作者==书2.作者.......
    书1.equals(书2)==true;
    书1!=书2;
    因为我如果把我那本书(书1)撕破了,我同学的书(书2)却不会破;
    即使内容完全相同的两个对象,也会有各自的改变,改变后就会不同,所以==应该比较引用,而内容应该用equals比较,这才是OOP,内容不代表对象的全部
    世界上有那么多一样的东西,难道他们都相等(==)吗?