導航:首頁 > 編程語言 > javaprimitive

javaprimitive

發布時間:2022-04-19 05:35:35

java集合框架的數組與容器

數組與其它容器的區別體現在三個方面:效率,類型識別以及可以持有primitives。數組是Java提供的,能隨機存儲和訪問reference序列的諸多方法中的,最高效的一種。數組是一個簡單的線性序列,所以它可以快速的訪問其中的元素。但是速度是有代價的;當你創建了一個數組之後,它的容量就固定了,而且在其生命周期里不能改變。也許你會提議先創建一個數組,等到快不夠用的時候,再創建一個新的,然後將舊的數組里的reference全部導到新的裡面。其實(我們以後會講的)ArrayList就是這么做的。但是這種靈活性所帶來的開銷,使得ArrayList的效率比起數組有了明顯下降。
Java對數組和容器都做邊界檢查;如果過了界,它就會給一個RuntimeException。這種異常表明這個錯誤是由程序員造成的,這樣你就用不著再在程序裡面檢查了。
還有一些泛型容器類包括List,Set和Map。他們處理對象的時候就好像這些對象都沒有自己的具體類型一樣。也就是說,容器將它所含的元素都看成是(Java中所有類的根類)Object的。這樣你只需要建一種容器,就能把所有類型的對象全都放進去。從這個角度來看,這種作法很不錯(只是苦了primitive。如果是常量,你還可以用Java的primitive的Wrapper類;如果是變數,那就只能放在你自己的類里了)。與其他泛型容器相比,這里體現數組的第二個優勢:創建數組的時候,你也同時指明了它所持有的對象的類型(這又引出了第三點--數組可以持有primitives,而容器卻不行)。也就是說,它會在編譯的時候作類型檢查,從而防止你插入錯誤類型的對象,或者是在提取對象的時候把對象的類型給搞錯了。Java在編譯和運行時都能阻止你將一個不恰當的消息傳給對象。所有這並不是說使用容器就有什麼危險,只是如果編譯器能夠幫你指定,那麼程序運行會更快,最終用戶也會較少收到程序運行異常的騷擾。
從效率和類型檢查的角度來看,使用數組總是沒錯的。但是,如果你在解決一個更為一般的問題,那數組就會顯得功能太弱了點。
不管你用的是那種類型的數組,數組的標識符實際上都是一個「創建在堆(heap)里的實實在在的對象的」reference。實際上是那個對象持有其他對象的reference。你即可以用數組的初始化語句,隱含地創建這個對象,也可以用new表達式,明確地創建這個對象,只讀的length屬性能告訴你數組能存儲多少元素。它是數組對象的一部分(實際上也是你唯一能訪問的屬性或方法)。『[]』語法是另一條訪問數組對象的途徑。
你沒法知道數組裡面究竟放了多少元素,因為length只是告訴你數組能放多少元素,也就是說是數組對象的容量,而不是它真正已經持有的元素的數量。但是,創建數組對象的時候,它所持有的reference都會被自動地初始化為null,所以你可以通過檢查數組的某個「槽位」是否為null,來判斷它是否持有對象。以此類推,primitive的數組,會自動來數字初始化為零,字元初始化為(char)0,boolean初始化為false。
容器類只能持有Object對象的reference。而數組除了能持有Objects的reference之外,還可以直接持有primitive。當然可以使用諸如Integer,Double之類的wrapper類。把primitive的值放到容器中,但這樣總有點怪怪的。此外,primitive數組的效率要比wrapper類容器的高出許多。
當然,如果你使用primitive的時候,還需要那種「能隨需要自動擴展的」容器類的靈活性,那就不能用數組了。你只能用容器來存儲primitive的wrapper類。

Ⅱ java在傳參的時候會自動裝箱,這樣設計有什麼好處

雖然我猜題主自己是知道想問的是什麼,但這個描述方式還是大大的不好。

Java的primitive type值作為參數傳遞給方法時,

如果接收該值的形式參數是匹配的primitive type則不會自動裝箱,
如果接收該值的形式參數是匹配的包裝類型則會自動裝箱
這個行為在C#也是一模一樣的,只是要把「primitive type」改為「值類型」(value type)。

故意舉幾個「反例」。
例如說,C#里這段代碼是否會發生自動裝箱:

public static void Foo(int i)
{
Console.WriteLine("i = {0}", i);
}

答案是:會。這里調用的WriteLine()方法是System.Console.WriteLine(String, Object),也就是說接收實際參數i的形式參數是一個object類型(引用類型)的,所以會發生自動裝箱。

又例如說,Java例這段代碼是否會發生自動裝箱:

public static int foo(int a) {
return bar(a) + 1;
}

public static int bar(int b) {
return -b;
}

答案是:不會。從foo()調用bar()時,實際參數a與形式參數b是相互匹配的primitive type——都是int——因而不需要發生裝箱操作。

題主多半實際上想問的是跟Java泛型的擦除實現跟C#泛型的具體化(reify)實現相關的。那是另一個話題了。

Ⅲ 有人知道在java里邊primitive type 和wrapped type的區別

primitive type: 基本類型,像int、double就是。
wrapped type:包裝類型,int—>Integer,double—>Decimal

基本類型跟就是不可實例化的,可以直接初始化、賦值、運算。不可調用方法,不可放入容器(要求必須是類實例才行)。
int i=10;
i++;

包裝類型就是把基本類型變成一個類實例,一定要new才產生,可以調用方法,可以放入容器。
int tt=100;
tt++;
Integer kk=new Integer(tt); //tt的包裝類實例
System.out.println(kk.intValue()); //還是101
HashMap m=new HashMap();
m.put("abc",kk);

String是特殊的,可以像基本類型這樣用,但其實它是類實例來的,可以調用它的方法,也可以放入到容器裡面。JVM對String作了特殊處理。
String s="123456";
System.out.println(s.substring(0,1));
HashMap m=new HashMap();
m.put("abc",s);

Ⅳ java變數 值的改變 問題

  1. 變數名(a,b...)本身是一個地址,而變數的值是在內存中分配的實際的內存數據,比如inta=1,就是指a這個地址指向存放了字面量數據1的內存數據。

  2. 變數值的改變是變數表示的地址的改變,差不多就是你說的意思

  3. 不能說基本數據類型都存在於棧,這是不準確的,首先你要搞清楚線程這個概念,java運行中,每一個線程都維持一個線程棧(也可以說成方法棧,因為線程就是運行你的方法代碼的),線程棧由一個個棧幀組成,每一個棧幀都表示一個方法的調用(處於棧頂的棧幀就是當前正在運行的方法),所以可以知道,方法中的變數都是存放在棧幀(棧)中的,如果變數引用的是對象,由於對象還是得在堆中分配,那麼就會有一個棧中的變數指向堆中的一個對象。但是一個類本身可以有實例變數啊,如果這個變數是一個基本類型的話,那這個變數就存在於堆中了啊,也就是說基本數據類型也可以存放在堆中啊。

  4. 對象的實體確實是存放在堆中沒錯啊


還有什麼不懂可以繼續問。

Ⅳ java中primitive怎麼用可否用代碼給我舉個例子謝謝啦!!

說到primitive,必然也會提到它相對應的wrapped:
primitive type: 基本類型,像int、double就是。
wrapped type:包裝類型,int—>Integer,double—>Decimal
基本類型跟就是不可實例化的,可以直接初始化、賦值、運算。不可調用方法,不可放入容器(要求必須是類實例才行)。
int i=10;
i++;

包裝類型就是把基本類型變成一個類實例,一定要new才產生,可以調用方法,可以放入容器。
int tt=100;
tt++;
Integer kk=new Integer(tt); //tt的包裝類實例
System.out.println(kk.intValue()); //還是101
HashMap m=new HashMap();
m.put("abc",kk);

String是特殊的,可以像基本類型這樣用,但其實它是類實例來的,可以調用它的方法,也可以放入到容器裡面。JVM對String作了特殊處理。
String s="123456";
System.out.println(s.substring(0,1));
HashMap m=new HashMap();
m.put("abc",s);

Ⅵ Eclipse在進行java程序調試時,變數後的id是什麼為什麼primitive類型沒有顯示相應的id

id是Eclipse的debugger自己生成的,用於告訴你哪些變數是指向同一個對象:id相同即指向同一個對象。primitive不是對象,所以就沒有id。但是如果你用primitive的wrapper類,即Integer,Long(注意首字母是大寫),那麼就會有id了。

Ⅶ java中String 屬於什麼變數 primitive主數據類型變數還是對象引用變數

String是Java中的類不是基本數據類型,String是通過new一個String對象來存貯字元串的,在內存的堆裡面開辟空間,同時在棧裡面存儲引用,指向堆裡面的空間 例 String str=new String(); str就存放在棧中指向堆中開辟的空間

Ⅷ 在Java中什麼是 Primitive 和 Reference 類型

Java的數據類型分為兩類:primitive和reference類型
Java雖然是個面向對象的語言,也聲稱「Everything is object」- 一切都是對象。但是,我覺得還不夠純粹和徹底,和ruby或者python比較一下就知道了。在Java中,數字和布爾類型就不被看做對象,而是被稱為primitive類型。不過也不見的就不好,本文也不是想對此評論和分析。本文是想闡述Java的數據類型。
Java的數據類型

Java的數據類型分為兩類:primitive和reference類型。我們可以從hold數據這個角度來說。primitive類型可以hold數字和布爾數據;reference類型可以hold對象,介面和數組類型的數據的指針。可以想像後一種數據比較復雜,往往是一段數據,不像primitive的數據是比較單純的數據單元,比如int,float和boolean。

Ⅸ primitive和reference各代表什麼

在java里:
primitive type是基本類型,比如int,float,char
reference是引用,有點像c里的指針一樣的東西,但它直接就代表了它所指的對象。c++里似乎也有引用這個叫法

Ⅹ asn1primitive.java在哪個包裡面

java沒有utils這個類,除非是同事寫的,沒有告訴自己,所以找不到
不過java有 java.util這個package。
包含集合框架、遺留的 collection 類、事件模型、日期和時間設施、國際化和各種實用工具類(字元串標記生成器、隨機數生成器和位數組、日期Date類、堆棧Stack類、向量Vector類等)。集合類、時間處理模式、日期時間工具等各類常用工具包

閱讀全文

與javaprimitive相關的資料

熱點內容
壓縮包解碼器下載 瀏覽:130
愛旅行的預備程序員 瀏覽:111
安卓qq瀏覽器怎麼轉換到ios 瀏覽:292
不同編譯器的庫可以調用嗎 瀏覽:455
灰度信託基金加密 瀏覽:421
宿遷程序員兼職網上接單 瀏覽:924
電視編譯器怎麼設置 瀏覽:276
手機如何解壓漢字密碼的壓縮包 瀏覽:701
為什麼很多程序員愛用vim 瀏覽:828
安卓手機怎麼連接寶華韋健音響 瀏覽:555
12星座製作解壓球 瀏覽:867
java調用oracle數據 瀏覽:827
怎麼在伺服器上上傳小程序源碼 瀏覽:304
空中加油通達信指標公式源碼 瀏覽:38
分卷解壓只解壓了一部分 瀏覽:760
php網站自動登錄 瀏覽:705
合肥凌達壓縮機招聘 瀏覽:965
怎麼找到文件夾的圖標 瀏覽:237
linuxc編程pdf百度雲 瀏覽:192
會計pdf下載 瀏覽:835