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

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

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

    java函數(shù)的參數(shù)傳遞和String類型

    Posted on 2009-06-06 09:02 thui 閱讀(2947) 評論(4)  編輯  收藏 所屬分類: java技術(shù)

    java的String類型,你徹底理解嗎?看看下面的題目:

    String s=”abc”;

    String s1=”abc”;

    String s2=new String(“abc”);

    String s3=s2.intern();

    System.out.println(s1==s);

    System.out.println(s1==s2);

    System.out.println(s1==s3);

    上面的題目會打印什么?

    如果你不確定,那么請打開Eclipse,敲入上面的程序運行一下,你會發(fā)現(xiàn)打印的是true、false、true,為什么會有上面的打印呢?了解了下面關(guān)于java String的細節(jié)后,就會明白:

    1.雙引號字符串是常量字符串,在java文件編譯的時候就放在虛擬機的常量池中,比如s,當創(chuàng)建abc時,發(fā)現(xiàn)常量池中沒有就在常量池中創(chuàng)建abc并把abc的地址賦給s,當再創(chuàng)建s1時,首先會去常量池中去查找abc是否存在,如果存在就把常量池中abc的地址賦給s1,所以比較s和s1的地址是相等的

    2.如果用new的方法創(chuàng)建一個String時,就和s=”abc”不一樣了,s2=new String(“abc”)是在程序運行時創(chuàng)建,不是創(chuàng)建在常量池而是和其他java對象一樣在java堆上創(chuàng)建,因此它的地址和s不用.

    3.如果運行時想把一個String創(chuàng)建到常量池中,java提供了一種方法,這個方法也會先檢查常量池是否存在abc,若存在返回abc在池中的地址。所以最后一個打印時true

    在看下面的題目:

    String s1=”ab”;

    String s2=”cd”;

    String s3=”abcd”;

    String s4=s1+s2;

    String s5=”ab”+"cd”;

    System.out.println(s4==s3);

    System.out.println(s5==s3);

    這是又會是什么結(jié)果呢?答案是false,true,這個題目說明兩個字符串常量連接和還是字符串常量,但是只要其中一個是變量,就和new的效果一樣了,即是在堆上創(chuàng)建

    說完了java的String類型,我們最后看看java函數(shù)參數(shù)的傳遞,到底是值傳遞還是引用傳遞呢?一般的說法是對于基本類型比如int、char是值傳遞,對于對象類型是引用傳遞。這種說法沒錯,但是請看下面的例子

    String s=”abc”;

    change(s);

    System.out.println(s);

    public void change(String str)

    {

      str=”abcd”;

    }

    上面的程序會有什么結(jié)果呢?打印abc還是abcd,運行程序會發(fā)現(xiàn)打印的是abc,完了,似乎不合乎常理,按理說String 也是對象,應(yīng)該是引用傳遞才對啊,有的同學知道java的String類型是不可變類型,會得出結(jié)果abc,具體解釋是String就相當于是char[]的包裝類。包裝類的特質(zhì)之一就是在對其值進行操作時會體現(xiàn)出其對應(yīng)的基本類型的性質(zhì)。在參數(shù)傳遞時,包裝類就是如此體現(xiàn)的。所以,對于String在這種情況下的展現(xiàn)結(jié)果的解釋就自然而然得出了。同樣的,Integer、Float等這些包裝類和String在這種情況下的表現(xiàn)是相同的。下面從函數(shù)參數(shù)傳遞的方式來理解也可以得出相同的結(jié)果。

    java的參數(shù)傳遞本質(zhì)上都可以認為是值傳遞,對基本類型自然不必說,對于對象類型,傳遞的是對象的地址,地址是個數(shù)字,也是基本類型,所以也還是值傳遞的, 有了這個基礎(chǔ),上面的題目可以這樣理解,s是字符串a(chǎn)bc的地址,調(diào)用change方法時,把s的拷貝賦給str,即str也指向abc,但是在方法里又把str指向abcd,str就是abcd的地址了,但是s還是指向的abc。

    Feedback

    # re: java函數(shù)的參數(shù)傳遞和String類型  回復(fù)  更多評論   

    2010-11-24 14:04 by 老徐
    什么啊,胡扯嗎不是!

    # re: java函數(shù)的參數(shù)傳遞和String類型  回復(fù)  更多評論   

    2011-03-29 18:20 by happyldp
    樓主牛逼??!

    # re: java函數(shù)的參數(shù)傳遞和String類型  回復(fù)  更多評論   

    2014-05-07 23:49 by <script>alert("fuck")</script&g
    還不錯 學習學習

    # re: java函數(shù)的參數(shù)傳遞和String類型  回復(fù)  更多評論   

    2015-09-29 12:54 by lzyer
    class Person{

    private Integer id;
    private String name;
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

    }
    public class StringTest {

    public void changeString(String s){

    s = "asds";
    }
    public void changeInteger(Integer i){

    i+=2;
    }
    public void changePerson(Person p){
    Person a = p;
    a.setId(2);

    }
    public static void main(String[] args) {

    StringTest st = new StringTest();
    Person p = new Person();
    p.setId(1);
    p.setName("hello");
    st.changePerson(p);
    System.out.println(p.getId()+" : "+p.getName());
    }
    }
    結(jié)果為:2 : hello
    怎么解釋???

    posts - 11, comments - 8, trackbacks - 0, articles - 4

    Copyright © thui

    主站蜘蛛池模板: 国产成人精品亚洲精品| 在线观看免费人成视频色| 亚洲国产一成久久精品国产成人综合 | 99re在线免费视频| 亚洲av鲁丝一区二区三区| 好久久免费视频高清| 久久精品国产亚洲77777| 91香蕉在线观看免费高清| 亚洲精品不卡视频| 在线观看免费人成视频色9| 亚洲人成网站18禁止| 国产免费观看黄AV片| 特级做a爰片毛片免费看| 久久精品亚洲福利| 日韩视频在线观看免费| 亚洲日本视频在线观看| 成人毛片18女人毛片免费 | 美女黄色免费网站| 亚洲午夜国产片在线观看| 免费观看久久精彩视频| 亚洲成AV人综合在线观看| 日韩免费无砖专区2020狼| 日日摸夜夜添夜夜免费视频| 亚洲一区精品无码| 精品福利一区二区三区免费视频 | 日本精品人妻无码免费大全| 亚洲av色香蕉一区二区三区| 久久久久国产成人精品亚洲午夜| 污污网站18禁在线永久免费观看| 亚洲中文字幕一二三四区苍井空| 国产成人精品男人免费| 九九美女网站免费| 亚洲啪啪免费视频| 亚洲精品无码av天堂| 免费黄网站在线看| 亚洲欧美日韩一区二区三区 | 亚洲熟妇少妇任你躁在线观看无码| 中文字幕久精品免费视频| 亚洲成_人网站图片| 伊人久久综在合线亚洲91| 免费影院未满十八勿进网站|