西西河

主题:【游戏】不看不知道,一看吓一跳!!! -- Highway

共:💬47 🌺6
分页树展主题 · 全看首页 上页
/ 4
下页 末页
          • 家园 这正是迷惑所在之处。Integer和Integer比较,<=, >=比较的是

            内部的值,而!=比较的是两个Object(可能是Hash value)。如果是Employee class,由于不能auto unboxing,编译就不能通过。

            我个人不喜欢这种设计,非常容易出错,并且很隐蔽。

    • 家园 我们应该使用哪个版本的好呢?

      我昨天又照你说的做了第二题,结果与你后来公布的相同。可能是两个cchere.net地址的问题,现在看不到我回答那个帖子了。

      现在的问题是,我们该用哪个版本比较好?

      SUN应该尽快出一个稳健的版本吧?

      还是说我们要重新整理我们一贯的思维方式?

      • 家园 这个题目的意思是让我们注意一下class dependence

        的问题,有时候问题并不是那么想当然。单就这个问题而言,我觉得是Java设计的不够好。当然,这个“特点”Java在他的技术文档里指出了,没搞对还是我们的错。

        Java 5.0有不少新的feature,但是也带来一些困惑。这可能就是成长的代价吧!

    • 家园 我用1.4.2_08b,都挺正常的啊

      第一个不会死循环,马上退出。

      第二个先打印the null set,后physics chemistry biology。

      • 家园 这个考试是在Java 5.0下面进行的。我手边没有1.4.2,不知道

        到底是什么情况。注意第二题的做法。

        1)先编译两个class.

        2) 修改Words,然后志编译它。

        再试试看!

        • 家园 要那样

          岂不是5.0的bug?这个难算Feature吧。

          • 家园 说说你是什么结果,怎么想的?
            • 家园 刚刚特意download了JSDK 1.5.0 update 4 (就是Java5.0吧) 试了一下

              结果同前面wsxx兄用jsdk1.4.2得出的一样。

              第一个,直接跳出,不会死循环。

              第二个,先是the null set,后是physics chemistry biology。

              这也是我们expected的结果。

              第一个,前面你可我服兄解释了,三个条件是互斥的,如果能跳进去死循环,我想应该被视作bug吧!除非“=”的被overload了,含义不同,但c++允许operator overload,java中好像不允许这么做。

              第二个,打出physics chemistry biology也没什么不合理的,本来程序就是expect这个结果。

              在下不是写Java的,说错的地方请多多指教。

              • 家园 先说第二个,答案是the chemistry set,如果按照规定的步骤来做的话

                也就是你修改了Words Class后,没有Touch PrintWords.class,只编译了Words.java(假设PrintWords已经发布到了客户手里)。你会发现我们原来以为的run time dymanic loading有了问题。至于为什么,我在下面的帖子里有解释。

                第一个问题我们都认为那个条件肯定是false。循环不可能进入。但是在Java 5.0中,它是可以成立的。比如

                Integer i = new Integer(0);

                Integer j = new Integer(0);

                这样,

                while (i <= j && j <= i && i != j) {

                }

                将无限循环。注意,Java 5.0中<=, >=操作符适用于Object,具体比较的时候要先unbox,比的是两个Object的值。而i和j是两个不同的Object,!=是成立的,!=是Object间的比较。

    • 家园 第一个在java里是这样的吧
      while (i <= j && j <= i && i != j) {
      }

      条件还原一下,应该是这样的

      if (i <= j) {
        if (j <= i) {
          if (i<>j) {
            do 循环里面的
          }
        }
      }

      所以呢,无论 i>j, i<j, i=j,都进不去循环里层的

分页树展主题 · 全看首页 上页
/ 4
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河