不同於C#的Java實值型別和String類型

來源:互聯網
上載者:User

與C#一樣,java也對基本類型進行了封裝,int封裝出Integer類,boolean封裝出Boolean類。這樣一來,基本類型就突破了實值型別的限制,獲得了物件導向的好處。然而,與.NET不同,java中的封裝類是真正的參考型別,比如在java中用“==”比較兩個封裝類對象,儘管值相等,得到的結果也很可能是false,而不是像.NET一樣,將基本類型的一些操作符作了重載,使得“==”符號的行為看起來與基本類型完全一致。

在java中,“Integer i=10,j=10;”使得i==j為true,但如果i或者j任何一個使用“new Integer(10)”,那麼i==j的值將是false,因為java遇到new關鍵字就會開闢新的堆空間,這樣就導致兩個封裝類對象的引用地址不同。同樣的差異還出現在String類型。對此在java中強烈推薦使用equals方法而不是“==”來比較封裝類對象的值。

 

測試代碼如下:

code

public class ValueType
{
    public static void main(String[] args)
    {
        int ii = 10, jj = 10;
        System.out.println("ii==jj:" + (ii == jj)); // true

        Integer i = new Integer(10), j = new Integer(10);
        System.out.println("i==j:" + (i == j)); // false
        System.out.println("i.equals(j):" + i.equals(j)); // true

        System.out.println("ii==j:" + (ii == j)); // true
        System.out.println("i.equals(jj):" + i.equals(jj)); //true

        String x = "xxx";
        String y = "xxx";
        String z = new String("xxx");

        System.out.println("x==y:" + (x == y)); //true
        System.out.println("x.equals(y):" + (x.equals(y))); // true
        System.out.println("x==z:" + (x == z)); // false
        System.out.println("x.equals(z):" + (x.equals(z))); // true

        System.out.println("x.subString(1,2):" + x.substring(1,2)); // x
    }
}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.