Java中,一切皆是对象,为何数据类型中还分为:基本类型和对象?
Java中,一切皆是對象!為何數據類型中還分為:基本類型和對象?按理不應該只有一個類型—對象嗎?
1.首先,Java中一切皆是對象!這句話沒錯,因為八種基本類型都有對應的包裝類(int的包裝類是Integer),包裝類自然就是對象了。基本類型一直都是Java語言的一部分,這主要是基于程序性能的考量,基本類型定義的變量是存放在棧中,比如int i=5;而Integer j=new Integer(10); j則只是一個對象的引用,存放在棧中,而實際的數值10則是放在堆里,堆的讀寫速度遠不及棧了。再有就是基本類型定義的變量創建和銷毀很快,而類定義的變量還需要JVM去銷毀。
2.其實java不是100%的面向對象編程,比如基本數據類型如int,boolean等等都不是對象,也就是不能用new的方式獲取,但是java對這些基本數據類型都有解決辦法,就是對著一個封裝類型,但是他們的封裝類是對象。比如int對應著Integer,boolean對應著Boolean,他們都是為了解決基本數據類型面向對象用的。
【對象與基本數據類型的區別】
基本數據類型在棧中進行分配,而對象類型在堆中進行分配。
所有方法的參數都是在傳遞引用而非本身的值(基本類型例外)。
對象之間的賦值只是傳遞引用,基本類型之間的賦值是創建新的拷貝。
1
2
3
有關值傳遞還是引用傳遞見Java 中引用傳遞還是值傳遞
注意:
①對于基本類型,“==”和“!=”是在比較值。而對于對象來說,“==”和“!=”是在比較兩個引用是否相同。
②Java 語言里的 equals方法其實是交給開發者去覆寫的,讓開發者自己去定義滿足什么條件的兩個Object是equal的。所以我們不能單純的說equals到底比較的是什么。你想知道一個類的equals方法是什么意思就是要去看定義。
public static void main(String[] args) {
? ? ? ? Date a = new Date(1496620800000L);//創建對象a,L代表long int?
? ? ? ? Date b = new Date(1496620800000L);//創建對象b
? ? ? ? Date c=a;//將對象a賦值給c,只是傳遞引用,即對于非基本數據類型變量, = 操作是復制了變量的引用
? ? ? ? System.out.println(a);
? ? ? ? System.out.println(b);
? ? ? ? System.out.println(c);
? ? ? ? System.out.println("a==b? ?"+(a==b));
? ? ? ? System.out.println("a equals b? "+(a.equals(b)));
? ? ? ? System.out.println("c==a? ?"+(c==a));
? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
輸出結果如下
Mon Jun 05 08:00:00 CST 2017
Mon Jun 05 08:00:00 CST 2017
Mon Jun 05 08:00:00 CST 2017
a==b? ?false
a equals b? true
c==a? ?true
1
2
3
4
5
6
模擬圖解是這樣的
對象 a 、b ,用== 判斷結果為不等,因為而對于對象a、b來說,“==”是在比較兩個引用是否相同,顯然不等。
對象 a 、b ,用equals() 判斷結果為等。查看API可以知道,Date類中equals()方法 比較的是getTime()的返回得long int 值是否相等。
two Date objects are equal if and only if?
the getTime method returns the same long value for both.
1
2
對象 a 、c ,,用== 判斷結果為等,因為而對于對象a、c來說,兩個引用是否相同,顯然等。
————————————————
版權聲明:本文為CSDN博主「Casionx」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/summerxiachen/article/details/79402086
總結
以上是生活随笔為你收集整理的Java中,一切皆是对象,为何数据类型中还分为:基本类型和对象?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金砖(说一说金砖的简介)
- 下一篇: 顾城的诗小巷出处(顾城的诗)