1. 程式人生 > >Java基本資料型別取值範圍,為什麼String 不是基本資料型別,char的取值範圍為什麼沒有負數

Java基本資料型別取值範圍,為什麼String 不是基本資料型別,char的取值範圍為什麼沒有負數

一、在JAVA中一共有八種基本資料型別,他們分別是
byte、short、int、long、float、double、char、boolean

整型
其中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)

可以看到byteshort的取值範圍比較小,而long的取值範圍太大,佔用的空間多,基本上int可以滿足我們的日常的計算了,而且int也是使用的最多的整型型別了。
在通常情況下,如果JAVA中出現了一個整數數字比如35,那麼這個數字就是int型的,如果我們希望它是byte型的,可以在資料後加上大寫的 B:35B,表示它是byte型的,同樣的35S表示short型,35L表示long型的,表示int我們可以什麼都不用加,但是如果要表示long型的,就一定要在資料後面加“L”。

浮點型
floatdouble是表示浮點型的資料型別,他們之間的區別在於他們的精確度不同
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”。
浮點型的資料是不能完全精確的,所以有的時候在計算的時候可能會在小數點最後幾位出現浮動,這是正常的。

boolean型(布林型)
這個型別只有兩個值,true和false(真和非真)
boolean t = true;
boolean f = false;

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。
如果我們這樣定義c看看
char c = ’ \u0031 ‘;輸出的結果仍然是1,這是因為字元’1’對應著unicode編碼就是\u0031
char c1 = ‘h’,c2 = ‘e’,c3=’l’,c4=’l’,c5 = ‘o’;
System.out.print(c1);System.out.print(c2);System.out.print(c3);System.out.print(c4);Sytem.out.print(c5);

二、String為什麼不是基本資料型別
java String 是個物件,是引用型別
基礎型別與引用型別的區別是,基礎型別只表示簡單的字元或數字,引用型別可以是任何複雜的資料結構
基本型別僅表示簡單的資料型別,引用型別可以表示複雜的資料型別,還可以操作這種資料型別的行為
java虛擬機器處理基礎型別與引用型別的方式是不一樣的,對於基本型別,java虛擬機器會為其分配資料型別實際佔用的記憶體空間,而對於引用型別變數,他僅僅是一個指向堆區中某個例項的指標。

三、char的取值範圍為什麼沒有負數
char的取值範圍是0~65535
一開始我也很奇怪為什麼char取值沒有負數,後面經過學習瞭解才知道:char表示一個字元,一個整體,Unicode編碼中的組成部分——摘自百度。
也就是說他的取值範圍是在Unicode編碼中規定的,而Unicode編碼規定char的取值範圍就是0~65535,沒有負值。

最後貼出百度解釋和定義的Unicode編碼:
Unicode碼:
Unicode只有一個字符集,中、日、韓的三種文字佔用了Unicode中0x3000到0x9FFF的部分 Unicode目前普遍採用的是UCS-2,它用兩個位元組來編碼一個字元, 比如漢字”經”的編碼是0x7ECF,注意字元碼一般用十六進位制來 表示,為了與十進位制區分,十六進位制以0x開頭,0x7ECF轉換成十進位制 就是32463,UCS-2用兩個位元組來編碼字元,兩個位元組就是16位二進位制, 2的16次方等於65536,所以UCS-2最多能編碼65536個字元。 編碼從0到127的字元與ASCII編碼的字元一樣,比如字母”a”的Unicode 編碼是0x0061,十進位制是97,而”a”的ASCII編碼是0x61,十進位制也是97, 對於漢字的編碼,事實上Unicode對漢字支援不怎麼好,這也是沒辦法的, 簡體和繁體總共有六七萬個漢字,而UCS-2最多能表示65536個,才六萬 多個,所以Unicode只能排除一些幾乎不用的漢字,好在常用的簡體漢字 也不過七千多個,為了能表示所有漢字,Unicode也有UCS-4規範,就是用 4個位元組來編碼字元
定義:
Unicode碼擴充套件自ASCII字元集。在嚴格的ASCII中,每個字元用7位元表示,或者電腦上普遍使用的每字元有8位元寬;而Unicode使用全16位元字元集。這使得Unicode能夠表示世界上所有的書寫語言中可能用於電腦通訊的字元、象形文字和其他符號。Unicode最初打算作為ASCII的補充,可能的話,最終將代替它。考慮到ASCII是電腦中最具支配地位的標準,所以這的確是一個很高的目標。
Unicode影響到了電腦工業的每個部分,但也許會對作業系統和程式設計語言的影響最大。從這方面來看,我們已經上路了。Windows NT從底層支援Unicode。
目前計算機中用得最廣泛的字符集及其編碼,是由美國國家標準局(ANSI)制定的ASCII碼(American Standard Code for Information Interchange,美國標準資訊交換碼),它已被國際標準化組織(ISO)定為國際標準,稱為ISO 646標準。適用於所有拉丁文字字母,ASCII碼有7位碼和8位碼兩種形式。

相關推薦

Java中 鍵盤錄入ScannerString與 Integer資料型別轉換

Scanner的使用 (1)用於鍵盤錄入資料的類。 (2): A:講解了System.in這個東西。 它其實是標準的輸入流,對應於鍵盤錄入 B:常用的格式

Python走過的坑可變可變資料型別

Python走過的坑,可變不可變資料型別 Python標準資料型別 Python不可變資料型別(一個蘿蔔一個坑) 可變資料型別(一塊地好多蘿蔔) Python標準資料型別 Number(數字) String(字串)

Maven+SSM查詢資料會報錯返回為null 解決方案

錯誤問題 當我使用Maven+SSM寫登入案例的時候,mybatis的對映檔案中的sql直接放在navicat中能查詢出值,但是程式中的返回值卻是null,控制檯也不會報錯,沒有錯誤資訊的提示。 解決方案 首先檢查配置檔案 <?xml vers

String是final修飾可變的解釋

賦值 變量 指向 修飾 對象 string num str pos String s = "Java"; s = "HTML";第一條語句創建了一個內容為"Java"的String對象,並將其引用賦值給s。第二條語句創建了一個內容為"HTML"的新String對象,並將其

32 行高 1 line-height 行高 2 在font中也可以指定行高如果指定則按默認的

http image alt height com ima 分享圖片 bubuko lin 1 2 32 行高 1 line-height 行高 2 在font中也可以指定行高,如果不指定則按默認的值

IDEA 從GitHub上拉的專案POM.xml 能新增依賴 報錯:Non-resolvable parent POM for com.cdc:blinddate:0.0.1-SNAPSHOT:

錯誤重現: [ERROR]     Non-resolvable parent POM for com.fifree:backgroundFitfree:0.0.1-SNAPSHOT: Could not transfer artifact org.spri

win10安裝JDK cmd中可以執行java能用javac解決方案

win10安裝JDK cmd中可以執行java,但不能用javac 網上教程(1)新建->變數名"JAVA_HOME",變數值"C:\Java\jdk1.8.0_05"(即JDK的安裝路徑) (2)編輯->變數名"Path",在原變數值的最後面加上“;%JAVA_HOME%\bin;%JAVA_

Java 自動判斷配置檔案是否已經存在如果存在自動建立如果存在直接讀寫

try {     pro.load(new BufferedInputStream(new FileInputStream("config.ini"))); } catch (FileNotFoundException e) {     pro.put("GuestDefaultFloor", "10");

android app 讀取本地.db檔案實現資料本地化(附小demo)

今天是正月十三,作為壽星的我依然奮鬥在工作中,醉了。-------------喧囂的成人世界,守住本真的心。 在專案中,有一部分資料,雖然是從介面拿取的,但是這些資料有個特點,就是一般不會再去改變了。對於這樣的資料來說,我是絕對不會每次用都去調介面,請求資料需要時間,需

踩坑:javascript中for迴圈變數是Number型別導致for迴圈執行

情景:從html獲取4對{起點元素(id記為start)和終點元素(id記為end)},遍歷起點到終點的所有元素,並打印出元素id(假設id連續)解決方案:Number(待轉換數)進行強制轉換js程式碼:控制檯:如上圖控制檯:第一對兒元素{43,46},進入for迴圈正常列印

如何終止ajax請求?資料處理太慢想載入了要求中斷重新開始?使用jQuery或者原生JavaScript進行處理?

一:請求次數多的情況下我們可愛能會遇到; 二:非同步執行沒有返回具體引數,或者說後臺顯示返回success,前臺顯示空白; 三:網路載入失敗; 以上情況我們需要配合使用者體驗,我們可以在終止迴圈提示使用者網路狀態載入異常,重新載入; 1、採用jQuery的ajax方式

java壓縮圖片記憶體大小改變解析度大小第一種方式

/*** @Title: compressPicByQuality * @Description: 壓縮圖片,通過壓縮圖片質量,保持原圖大小* @param  quality:0-1* @return byte[] * @throws*/public static byte

python程式設計_Python異常機制try: 程式碼段 except 異常型別,e: 異常處理程式碼段如果知道異常型別可以使用try: 程式碼段 except Except,e:異常處理程式碼段;Ex

一個Python異常例項 一個簡單的異常例子,開啟一個不存在的檔案,引發異常: #!/usr/local/bin/python3.2 try: f = open("file-not-exists", "r") except IOError,e:

java壓縮圖片記憶體大小改變解析度大小第二種方式

/*** @Title: compressPic * @Description: 壓縮圖片,通過壓縮圖片質量,保持原圖大小* @param  quality:0-1    * @return byte[] * @throws*/public static byte[] co

java客戶端進行kafka測試時生產者能生產資訊消費者能消費資訊而且沒有報錯但是在虛擬機器中沒有任何錯誤

我的kafka在虛擬機器中都正常啟動,而且在虛擬機器中生產和消費資訊都沒有錯誤,但是使用window客戶端生產和消費時不成功,而且也不報任何錯誤,生產和消費訊息時都停留一段時間然後結束。以下是我提供的一種思路,但不一定適合所有這樣的錯誤:1.先看一下虛擬機器系統中kafka安

用cmd執行java可以能執行javac怎麼辦?

原因:這是因為安裝java時把jdk的路徑和jre的路徑選擇成一樣,就造成覆蓋了。這時候你在lib下也找不都tools.jar和dt.jar.解決:1.首先解除安裝java,解除安裝很容易,直接把這兩個有關java的程式給解除安裝了就行了(用windows自帶的解除安裝)。解除安裝完你也會發現,原來放java

基本數據類型轉StringString基本數據類型

數據類型 static 類型 ble 轉化 tostring 字符串 -- parseint 基本數據類型 --> 字符串 1、基本數據類型+"" String s = 5 + ""; 2、使用包裝類的靜態方法toString(

基本數據類型string類型的瞎扯final喜歡幹的事兒。final string

不同 類比 喜歡 tro 指向 都沒有 style 是什麽 工具 Java的兩大數據類型:基本數據類型/內置數據類型;引用數據類型。 基本數據類型:java提供了8種,6種數字類型,1種字符類型,1種布爾類型。 6中數字類型中有4個整數類型,2個浮點型。整數類型是:

fiddler filters 使用(fiddler只顯示指定請求fiddler顯示指定請求即filter請求過濾)(轉)

alt 正則 完全 字符 真的 upload 比較 left 模塊化 fiddler filters 使用(fiddler只顯示指定請求,fiddler不顯示指定請求,即filter請求過濾) Fiddler 有一個filters可以很好的幫助我們只顯示我們關系的請求或者隱

vue監聽input如果輸入正整數顯示0

參考大佬寫的,主要邏輯如下,繫結input監控事件,判斷正則輸入,如果不滿足,用setTimeout延遲修改值為0 程式碼如下: <el-input placeholder="請輸入內容" v-model="searcher" v-on:input="searchValue"