<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    CoffeeTree
    IT 男人's Blog helloheyongjin@sina.com
    你大娘已經不是你從前的大娘,你大爺依舊是你大爺
    由于涉java尚淺,今天在寫個小程序的時候遇到了個問題,無解,反復查看和調試后,了然,寫下以免忘卻。

    問題展示:

    代碼1:(Eshop類中定義下面一個方法,估計高手一看就知道我錯哪了)

        public static ArrayList getItems(String id)

        {

           ArrayList tempList = new ArrayList();

           if(id=="1"){

               tempList.add(new Product("11","Windows","$100"));

               tempList.add(new Product("12","Linux","$80"));

               tempList.add(new Product("13","XP2","$59"));

           }

           else if(id=="2"){

               tempList.add(new Product("21","Tomcat","$200"));

               tempList.add(new Product("22","Eclipse","$95"));

               tempList.add(new Product("23","Mysql","$48"));

           }

           else if(id=="3"){

               tempList.add(new Product("31","Jsp","$35"));

               tempList.add(new Product("32","J2EE","$15"));

               tempList.add(new Product("33","HTML","$45"));

           }

           return tempList;

        }

    代碼2:(某JSP頁面中表格)

    <table>

       <%

            String id = request.getParameter("catid");

            if(id==null)

               id="1";

            ArrayList pro = Eshop.getItems(id);

            Product p = null;

            for(int j=0;j<pro.size();j++)

            {

               p = (Product) pro.get(j);

        %>

        <tr>

            <td><%=p.getName() %></td><td><%=p.getPrice() %></td>

        </tr>

        <%

        }

        %>

    </table>

    問題:當地址欄地址為http://localhost:8080/Eshop2/index.jsp?catid=2時沒有達到我預期下段代碼的輸出:

            else if(id=="2"){

               tempList.add(new Product("21","Tomcat","$200"));

               tempList.add(new Product("22","Eclipse","$95"));

               tempList.add(new Product("23","Mysql","$48"));

           }

    錯誤原因:混淆equals==的區別。

    解決辦法:

           id=="1"           id.equals("1")

           id=="2"           id.equals("1")

    id=="3"           id.equals("1")

     

    下面說說:equals == 的區別

     

    JDK1.6定義 String.equals 如下:

    public boolean equals(Object anObject)

    將此字符串與指定的對象比較。當且僅當該參數不為 null,并且是與此對象表示相同字符序列的 String 對象時,結果才為 true

    定義說明只有兩個對象的“值”相等的時候返回true,equals是對象值的比較,然而“==”是引用的比較,也就是說只要不是引用的同一個對象那么就為false.

     

    一個典型的例子:

        <%!

        String str1 = new String("abc");

        String str2 = new String("abc");

        String str3 = str1;

        String str4 = "abc";

        String str5 = "abc";

    %>

     

    下面是網上找到的相關介紹:

     

    ==

    1、 比較的是操作符兩端的操作數是否是同一個對象

    2、 兩邊的操作數必須是同一類型的(可以是父子類之間)才能編譯通過。

    3、 比較的是地址,如果是具體的阿拉伯數字的比較,值相等則為true

    equals:

        比較的是兩個對象是否為同一個對象。

    String s="abce"是一種非常特殊的形式,new有本質的區別,它是java中唯一不需要new 就可以產生對象的途徑. String s="abce"形式賦值在java中叫直接量,它是在常量池中而不是象new 一樣放在壓縮堆中. 這種形式的字符串,JVM內部發生字符串拘留,即當聲明這樣的一個字符串后,JVM會在常量池中先查找有有沒有一個值為"abcd"的對象,如果有,就會把它賦給當前引用.即原來那個引用和現在這個引用指向了同一對象,如果沒有,則在常量池中新創建一個"abcd",下一次如果有String s1 = "abcd";又會將s1指向"abcd"這個對象,即以這形式聲明的字符串,只要值相等,任何多個引用都指向同一對象. String s = new String("abcd");和其它任何對象一樣.每調用一次就產生一個新對象.

    總結:

    定義java變量的時候,實際上只是產生了一個指向該類型的引用(它也占用內存空間),對這個“引用”進行賦值,就是將其指向某個內存空間;多次對“引用”進行賦值,jvm會產生多個內存空間,同時回收以前不用的內存空間。

    posted on 2008-12-23 02:32 何永進 閱讀(315) 評論(0)  編輯  收藏 所屬分類: JSP
     
    主站蜘蛛池模板: 四虎永久成人免费| 亚洲欧洲在线播放| 亚洲中文久久精品无码| 亚洲精品无码久久久久牙蜜区| 中文字幕免费视频| 女人18毛片免费观看| 亚洲 无码 在线 专区| 亚洲成av人无码亚洲成av人| 成年人免费观看视频网站| 亚洲国产a级视频| 亚洲综合自拍成人| 2021国内精品久久久久精免费| 久久青青草原亚洲av无码app| 一级毛片在线观看免费| 91亚洲导航深夜福利| 黄色一级视频免费| 最近中文字幕2019高清免费| 亚洲国产人成在线观看69网站 | 亚洲精品国产精品乱码不99| 抽搐一进一出gif免费视频| 中文字幕av无码无卡免费| 久久亚洲最大成人网4438| 久久国产乱子伦精品免费午夜| 成人午夜亚洲精品无码网站| 今天免费中文字幕视频| 免费欧洲美女牲交视频| AAAAA级少妇高潮大片免费看| 国产亚洲精品xxx| 99爱在线精品免费观看| 亚洲精品国产字幕久久不卡| 久久aa毛片免费播放嗯啊| 亚洲一区二区三区乱码在线欧洲| 午夜免费福利在线| 一级毛片aa高清免费观看| 久久久久亚洲AV无码网站| 日韩成人免费aa在线看| 中国内地毛片免费高清| 亚洲人成免费电影| 免费A级毛片无码A∨| 亚洲色中文字幕在线播放| 国产偷国产偷亚洲清高动态图|