<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
     
    主站蜘蛛池模板: 亚洲成色在线综合网站| 亚洲首页在线观看| jlzzjlzz亚洲乱熟在线播放| 亚洲国产二区三区久久| 亚洲乱码中文字幕在线| 成人性生交大片免费看好| 日本人的色道www免费一区| 亚洲国产美国国产综合一区二区 | 在线观看人成视频免费| 亚洲中文字幕无码一区二区三区| 亚洲一区AV无码少妇电影| 免费人成视频在线观看网站 | 亚洲日本香蕉视频观看视频| 一个人免费观看www视频| 成人男女网18免费视频| 亚洲五月六月丁香激情| 四虎在线成人免费网站| 亚洲综合自拍成人| 日韩电影免费在线观看中文字幕| 国产日产亚洲系列最新| 色天使色婷婷在线影院亚洲| 成人无遮挡裸免费视频在线观看 | 免费萌白酱国产一区二区| 色偷偷亚洲女人天堂观看欧| 久9久9精品免费观看| 国产成人精品日本亚洲专区| a级毛片高清免费视频| 亚洲日韩一页精品发布| 国产va免费精品| 亚洲一级片内射网站在线观看| 91成人免费福利网站在线| 亚洲妓女综合网99| 免费一看一级毛片人| 免费夜色污私人影院网站电影| 免费一看一级毛片全播放| 久久永久免费人妻精品| 亚洲AV无码资源在线观看| 午夜一级免费视频| 污网站在线观看免费| 久久亚洲精品人成综合网| 亚洲av无码成人精品区|