當前位置:首頁 » 編程語言 » java字位元組

java字位元組

發布時間: 2022-05-08 19:42:57

1. java各種類型各佔多少位元組,多少位

在Java中一共有8種基本數據類型,其中有4種整型,2種浮點類型,1種用於表示Unicode編碼的字元單元的字元類型和1種用於表示真值的boolean類型。(一個位元組等於8個bit)

  1. int 類型佔32個位元組; 4 位;

  2. short 類型佔16個位元組; 2位;

  3. long 類型佔64個位元組; 8位;

  4. float 類型佔32個位元組; 4位;

  5. double 類型佔64個位元組; 8位;

  6. char 類型佔16個位元組; 2位;

  7. boolean類型佔8個位元組; 1位;

  8. byte 類型佔8個位元組; 1位;

2. Java中文字元所佔的位元組數是多少

採用GB2312或GBK編碼方式時,一個中文字元佔2個位元組;而採用UTF-8編碼方式時,一個中文字元會佔3個位元組。

3. (java)如何獲取字元串的位元組數!

字元串是可以轉變成位元組數組,然後統計一下位元組數組的長度即可,參考如下代碼:
Java語言中,中文字元所佔的位元組數取決於字元的編碼方式,一般情況下,採用ISO8859-1編碼方式時,一個中文字元與一個英文字元一樣只佔1個位元組;採用GB2312或GBK編碼方式時,一個中文字元佔2個位元組;而採用UTF-8編碼方式時,一個中文字元會佔3個位元組。

public static void main(String []args) throws UnsupportedEncodingException {
// 運行結果:2
System.out.println("測試".getBytes("ISO8859-1").length);
// 運行結果:4
System.out.println("測試".getBytes("GB2312").length);
// 運行結果:4
System.out.println("測試".getBytes("GBK").length);
// 運行結果:6
System.out.println("測試".getBytes("UTF-8").length);
}

4. Java中一個字元到底多少個位元組

字元 不等於 位元組。
字元(char)是 Java 中的一種基本數據類型,由 2 個位元組組成,范圍從 0 開始,到 2^16-1。
位元組是一種數據量的單位,一個位元組等於 8 位。所有的數據所佔空間都可以用位元組數來衡量。例如一個字元占 2 個位元組,一個 int 占 4 個位元組,一個 double 占 8 個位元組 等等。

5. java一個漢字占幾個位元組

可能是2個、3個、4個位元組。不同的編碼格式佔位元組數是不同的,UTF-8編碼下一個中文所佔位元組也是不確定的。

6. java一個漢字占幾個位元組

1、首先,定義好主類程序,並為程序添加main程序入口。

7. 什麼是Java位元組碼

它是程序的一種低級表示,可以運行於Java虛擬機上。將程序抽象成位元組碼可以保證Java程序在各種設備上的運行
Java號稱是一門「一次編譯到處運行」的語言,從我們寫的java文件到通過編譯器編譯成java位元組碼文件(.class文件),這個過程是java編譯過程;而我們的java虛擬機執行的就是位元組碼文件。不論該位元組碼文件來自何方,由哪種編譯器編譯,甚至是手寫位元組碼文件,只要符合java虛擬機的規范,那麼它就能夠執行該位元組碼文件。

JAVA程序的運行

因為Java具有跨平台特性,為了實現這個特性Java執行在一台虛擬機上,這台虛擬機也就是JVM,Java通過JVM屏蔽了不同平台之間的差異,從而做到一次編譯到處執行。JVM位於Java編譯器和OS平台之間,Java編譯器只需面向JVM,生成JVM能理解的代碼,這個代碼即位元組碼,JVM再將位元組碼翻譯成真實機器所能理解的二進制機器碼。
位元組碼是怎麼產生的?

我們所編寫的程序都是.java格式,通常在執行的時候也許點擊一下eclipse的運行鍵就可以在控制台看到運行結果,但是也可以更酷一些,如果你裝了JDK,那就可以直接在以命令行的方式編譯運行你的.java文件,編譯後會形成.class文件,這個.class文件即位元組碼。
位元組碼怎麼解讀?

上圖是編譯好的位元組碼文件,即一堆16進制的位元組,如果使用IDE去打開,也許看到的是已經被反編譯的我們所熟悉的java代碼,但這才是純正的位元組碼

這里只介紹位元組碼由哪些部分組成, 具體的意思自行網路或者看文尾的連接, 有較為詳細的講解

上圖即位元組碼文件的組成部分, Class文件的結構不像XML等描述語言那樣鬆散自由。由於它沒有任何分隔符號,

所以,以上數據項無論是順序還是數量都是被嚴格限定的。哪個位元組代表什麼含義,長度是多少,先後順序如何,都不允許改變, 如上圖左側即每一部分規定的長度
魔數(Magic Number)

魔數是用來區分文件類型的一種標志,一般都是用文件的前幾個位元組來表示。
比如0XCAFE BABE表示的是class文件,那麼有人會問,文件類型可以通過文件名後綴來判斷啊?是的,但是文件名是可以修改的(包括後綴),那麼為了保證文件的安全性,將文件類型寫在文件內部來保證不被篡改。
至於為什麼是CAFE BABE估計大家也能猜到, 程序員與咖啡的不解之緣
版本號(Version)
版本號含主版本號和次版本號,都是各佔2個位元組。在此Demo種為0X0000 0033。其中前面的0000是次版本號,後面的0033是主版本號。通過進制轉換得到的是次版本號為0,主版本號為51。高版本的JDK能向下兼容以前版本的Class文件,但不能運行以後版本的Class文件,即使文件格式未發生任何變化. 這就是target參數的用處,可以在使用JDK 1.7編譯時指定-target 1.5
常量池(Constant Pool)
常量池是Class文件中的資源倉庫, 量池中主要存儲2大類常量:字面量和符號引用。字面量如文本字元串,java中聲明為final的常量值等等,而符號引用如類和介面的全局限定名,欄位的名稱和描述符,方法的名稱和描述符。常量池是一個表結構,在表的內容前有一個類型的計數器,表示常量池的長度
上面的表中描述了11中數據類型的結構,其實在jdk1.7之後又增加了3種(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。這樣算起來一共是14種
訪問標志(Access_Flag)
訪問標志信息包括該Class文件是類還是介面,是否被定義成public,是否是abstract,如果是類,是否被聲明成final。通過上面的源代碼,我們知道該文件是類並且是public。
0x 00 21:是0×0020和0×0001的並集。其中0×0020這個標志值涉及到位元組碼指令

類索引(This Class Name)
類索引用於確定類的全限定名
0×00 03 表示引用第3個常量,同時第3個常量引用第19個常量,查找得」com/demo/Demo」。#3.#19
父類索引(Super Class Name)
0×00 04 同理:#4.#20(java/lang/Object)
介面索引(Interfaces)
通過上邊位元組碼圖可以看到,這個介面有2+n個位元組,前兩個位元組表示的是介面數量,後面跟著就是介面的表。我們這個類沒有任何介面,所以應該是0000。果不其然,查找位元組碼文件得到的就是0000。
欄位表集合(fields)
欄位表用於描述類和介面中聲明的變數。這里的欄位包含了類級別變數以及實例變數,但是不包括方法內部聲明的局部變數。接下來就是2+n個欄位屬性。我們只有一個屬性a,所以應該是0001。查找文件果不其然是0001。
該區域含有欄位的訪問標志, 訪問許可權, 欄位的名稱索引, 欄位的描述符索引, 屬性表
描述符的作用就是用來描述欄位的數據類型、方法的參數列表和返回值。而屬性表就是為欄位表和方法表提供額外信息的表結構。對於欄位來說,此處如果將欄位聲明為一個static final msg = "aaa"的常量,則欄位後就會跟著一個屬性表,其中存在一項名為ConstantValue,指向常量池中的一個常量,值為的"aaa"。
方法(methods)
包含訪問標志表, 方法名索引 , 方法描述符索引, 屬性表數量,等
Attribute
0×0001 :同樣的,表示有1個Attributes了。
0x000f : #15(「SourceFile」)
0×0000 0002 attribute_length=2
0×0010 : sourcefile_index = #16(「Demo.java」)
SourceFile屬性用來記錄生成該Class文件的源碼文件名稱。

8. Java中 「字元類型」與「位元組類型」的區別

字元流處理的單元為2個位元組的unicode字元,分別操作字元、字元數組或字元串,而位元組流處理單元為1個位元組,
操作位元組和位元組數組。所以字元流是由java虛擬機將位元組轉化為2個位元組的unicode字元為單位的字元而成的,所以它對多國語言支持性比較好!如果是
音頻文件、圖片、歌曲,就用位元組流好點,如果是關繫到中文(文本)的,用字元流好點.
所有文件的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是文件的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取文件(特別是文本文件)時,也是一個位元組一個位元組地讀取以形成位元組序列.
位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串;
2.
位元組流提供了處理任何類型的io操作的功能,但它不能直接處理unicode字元,而字元流就可以。

9. java中一個字元是幾個位元組字元和位元組是同等的嗎

Java規定了字元的內碼要用UTF-16編碼,一個字元是2個位元組。外碼字元所佔位元組取決於具體編碼。字元和位元組是不一樣的。

外碼編碼不同,字元和位元組的換算不同,幾種常見的編碼換算如下:

ASCII編碼是單位元組編碼,只有英文字元,不能編碼漢字。

GBK編碼1個英文字元是1個位元組,一個漢字是是2個位元組。

UTF-8編碼1個英文字元是1個位元組,一個漢字是3個位元組。

Unicode編碼1個英文字元是2個位元組,一個漢字是2個位元組。

(9)java字位元組擴展閱讀

漢字編碼的困難點 漢字進入計算機,有許多困難,其原因主要有三點:

①數量龐大:一般認為,漢字總數已超過6萬個(包括簡化字)。雖有研究者主張規定3000多或4000字作為當代通用漢字,但仍比處理由二三十個字母組成的拼音文字要困難得多。

②字形復雜:有古體今體,繁體簡體,正體異體;而且筆畫相差懸殊,少的一筆,多的達36筆,簡化後平均為9.8筆。

③存在大量一音多字和一字多音的現象:漢語音節416個,分聲調後為1295個(根據《現代漢語詞典》統計,輕聲39個未計)。以1萬個漢字計算,每個不帶調的音節平均超過24個漢字,每個帶調音節平均超過7.7個漢字。有的同音同調字多達66個。一字多音現象也很普遍。

10. JAVA基本數據類型所佔位元組數是多少

在Java中一共有8種基本數據類型,其中有4種整型,2種浮點類型,1種用於表示Unicode編碼的字元單元的字元類型和1種用於表示真值的boolean類型。

一個位元組等於8個bit,java是跟平台無關的。

(1)整型:

其中byte、short、int、long都是表示整數的,只不過他們的取值范圍不一樣

byte的取值范圍為-128~127,佔用1個位元組(-2的7次方到2的7次方-1)

short的取值范圍為-32768~32767,佔用2個位元組(-2的15次方到2的15次方-1)

int的取值范圍為(-2147483648~2147483647),佔用4個位元組(-2的31次方到2的31次方-1)

long的取值范圍為(-9223372036854774808~9223372036854774807),佔用8個位元組(-2的63次方到2的63次方-1)。

可以看到byte和short的取值范圍比較小,而long的取值范圍太大,佔用的空間多,基本上int可以滿足我們的日常的計算了,而且int也是使用的最多的整型類型了。

在通常情況下,如果JAVA中出現了一個整數數字比如35,那麼這個數字就是int型的,如果我們希望它是byte型的,可以在數據後加上大寫的 B:35B,表示它是byte型的。

同樣的35S表示short型,35L表示long型的,表示int我們可以什麼都不用加,但是如果要表示long型的,就一定要在數據後面加「L」。

(2)浮點型:

float和double是表示浮點型的數據類型,他們之間的區別在於他們的精確度不同

float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方)佔用4個位元組

double 1.797693e+308~ 4.9000000e-324 佔用8個位元組

double型比float型存儲范圍更大,精度更高,所以通常的浮點型的數據在不聲明的情況下都是double型的,如果要表示一個數據是float型的,可以在數據後面加上「F」。

浮點型的數據是不能完全精確的,所以有的時候在計算的時候可能會在小數點最後幾位出現浮動,這是正常的。

(3)boolean型(布爾型):

這個類型只有兩個值,true和false(真和非真)

boolean t = true;

boolean f = false;

(4)char型(文本型) :

用於存放字元的數據類型,佔用2個位元組,採用unicode編碼,它的前128位元組編碼與ASCII兼容

字元的存儲范圍在u0000~uFFFF,在定義字元型的數據時候要注意加' ',比如 '1'表示字元'1'而不是數值1,

char c = ' 1 ';

我們試著輸出c看看,System.out.println(c);結果就是1,而如果我們這樣輸出呢System.out.println(c+0);

結果卻變成了49。

(10)java字位元組擴展閱讀

基本類型之間的轉換

將一種類型的值賦值給另一種類型是很常見的。在Java中,boolean 類型與其他7中類型的數據都不能進行轉換,這一點很明確。

但對於其他7種數據類型,它們之間都可以進行轉換,只是可能會存在精度損失或其他一些變化。

轉換分為自動轉換和強制轉換:

自動轉換(隱式):無需任何操作。

強制轉換(顯式):需使用轉換操作符(type)。

將6種數據類型按下面順序排列一下:

double > float > long > int > short > byte

如果從小轉換到大,那麼可以直接轉換,而從大到小,或char 和其他6種數據類型轉換,則必須使用強制轉換。



熱點內容
手機店設置的初始密碼一般是多少 發布:2025-05-11 09:33:15 瀏覽:400
昂科威選擇哪個配置 發布:2025-05-11 09:25:50 瀏覽:35
怎麼解決安卓視頻全屏卡頓 發布:2025-05-11 09:14:55 瀏覽:725
匯編從編譯到執行 發布:2025-05-11 09:09:04 瀏覽:257
安卓系統低版本如何升級 發布:2025-05-11 09:04:44 瀏覽:251
認證類型加密演算法 發布:2025-05-11 08:58:35 瀏覽:561
android停靠 發布:2025-05-11 08:42:23 瀏覽:645
超時代加密 發布:2025-05-11 08:41:29 瀏覽:780
為什麼還要輸入支取密碼 發布:2025-05-11 08:32:24 瀏覽:362
資料庫課程設計案例 發布:2025-05-11 08:15:33 瀏覽:51