成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

教妹學Java:Java中的數據類型

開發 后端
我妹(親妹)今年上大學了,學的計算機編程,沒成想,她的一名老師竟然是我的讀者,我妹是又驚喜又恐慌,驚喜是她哥我的讀者群體還挺廣泛的嘛,恐慌的是萬一學不好豈不是很丟他哥的臉?但我相信她一定能學好!

[[349207]]

我妹(親妹)今年上大學了,學的計算機編程,沒成想,她的一名老師竟然是我的讀者,我妹是又驚喜又恐慌,驚喜是她哥我的讀者群體還挺廣泛的嘛,恐慌的是萬一學不好豈不是很丟他哥的臉?但我相信她一定能學好!

“二哥,上一節提到了 Java 變量的數據類型,是不是指定了類型就限定了變量的取值范圍啊?”三妹吸了一口麥香可可奶茶后對我說。

“三妹,你不得了啊,長進很大嘛,都學會推理判斷了。Java 是一種靜態類型的編程語言,這意味著所有變量必須在使用之前聲明好,也就是必須得先指定變量的類型和名稱。”

Java 中的數據類型可分為 2 種:

1)基本數據類型。

基本數據類型是 Java 語言操作數據的基礎,包括 boolean、char、byte、short、int、long、float 和 double,共 8 種。

2)引用數據類型。

除了基本數據類型以外的類型,都是所謂的引用類型。常見的有數組(對,沒錯,數組是引用類型)、class(也就是類),以及接口(指向的是實現接口的類的對象)。

來個思維導圖,感受下。

 

通過上一節的學習,我們知道變量可以分為局部變量、成員變量、靜態變量。

當變量是局部變量的時候,必須得先初始化,否則編譯器不允許你使用它。拿 int 來舉例吧,看下圖。

 

當變量是成員變量或者靜態變量時,可以不進行初始化,它們會有一個默認值,仍然以 int 為例,來看代碼:

  1. /** 
  2.  * @author 微信搜「沉默王二」,回復關鍵字 PDF 
  3.  */ 
  4. public class LocalVar { 
  5.     private int a; 
  6.     static int b; 
  7.  
  8.     public static void main(String[] args) { 
  9.         LocalVar lv = new LocalVar(); 
  10.         System.out.println(lv.a); 
  11.         System.out.println(b); 
  12.     } 

來看輸出結果:

瞧見沒,int 作為成員變量時或者靜態變量時的默認值是 0。那不同的基本數據類型,是有不同的默認值和大小的,來個表格感受下。

數據類型 默認值 大小
boolean false 1比特
char '\u0000' 2字節
byte 0 1字節
short 0 2字節
int 0 4字節
long 0L 8字節
float 0.0f 4字節
double 0.0 8字節

那三妹可能要問,“比特和字節是什么鬼?”

比特幣聽說過吧?字節跳動聽說過吧?這些名字當然不是亂起的,確實和比特、字節有關系。

1)bit(比特)

比特作為信息技術的最基本存儲單位,非常小,但大名鼎鼎的比特幣就是以此命名的,它的簡寫為小寫字母“b”。

大家都知道,計算機是以二進制存儲數據的,二進制的一位,就是 1 比特,也就是說,比特要么為 0 要么為 1。

2)Byte(字節)

通常來說,一個英文字符是一個字節,一個中文字符是兩個字節。字節與比特的換算關系是:1 字節 = 8 比特。

在往上的單位就是 KB,并不是 1000 字節,因為計算機只認識二進制,因此是 2 的 10 次方,也就是 1024 個字節。

(終于知道 1024 和程序員的關系了吧?狗頭保命)

 

接下來,我們再來詳細地了解一下 8 種基本數據類型。

01、布爾

布爾(boolean)僅用于存儲兩個值:true 和 false,也就是真和假,通常用于條件的判斷。代碼示例:

  1. boolean flag = true

02、byte

byte 的取值范圍在 -128 和 127 之間,包含 127。最小值為 -128,最大值為 127,默認值為 0。

在網絡傳輸的過程中,為了節省空間,常用字節來作為數據的傳輸方式。代碼示例:

  1. byte a = 10; 
  2. byte b = -10; 

03、short

short 的取值范圍在 -32,768 和 32,767 之間,包含 32,767。最小值為 -32,768,最大值為 32,767,默認值為 0。代碼示例:

  1. short s = 10000; 
  2. short r = -5000; 

04、int

int 的取值范圍在 -2,147,483,648(-2 ^ 31)和 2,147,483,647(2 ^ 31 -1)(含)之間,默認值為 0。如果沒有特殊需求,整形數據就用 int。代碼示例:

  1. int a = 100000; 
  2. int b = -200000; 

05、long

long 的取值范圍在 -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)(含)之間,默認值為 0。如果 int 存儲不下,就用 long,整形數據就用 int。代碼示例:

  1. long a = 100000L;  
  2. long b = -200000L; 

為了和 int 作區分,long 型變量在聲明的時候,末尾要帶上大寫的“L”。不用小寫的“l”,是因為小寫的“l”容易和數字“1”混淆。

06、float

float 是單精度的浮點數,遵循 IEEE 754(二進制浮點數算術標準),取值范圍是無限的,默認值為 0.0f。float 不適合用于精確的數值,比如說貨幣。代碼示例:

  1. float f1 = 234.5f; 

為了和 double 作區分,float 型變量在聲明的時候,末尾要帶上小寫的“f”。不需要使用大寫的“F”,是因為小寫的“f”很容易辨別。

07、double

double 是雙精度的浮點數,遵循 IEEE 754(二進制浮點數算術標準),取值范圍也是無限的,默認值為 0.0。double 同樣不適合用于精確的數值,比如說貨幣。代碼示例:

  1. double d1 = 12.3 

那精確的數值用什么表示呢?最好使用 BigDecimal,它可以表示一個任意大小且精度完全準確的浮點數。針對貨幣類型的數值,也可以先乘以 100 轉成整形進行處理。

Tips:單精度是這樣的格式,1 位符號,8 位指數,23 位小數,有效位數為 7 位。

 

雙精度是這樣的格式,1 位符號,11 位指數,52 為小數,有效位數為 16 位。

 

取值范圍取決于指數位,計算精度取決于小數位(尾數)。小數位越多,則能表示的數越大,那么計算精度則越高。

一個數由若干位數字組成,其中影響測量精度的數字稱作有效數字,也稱有效數位。有效數字指科學計算中用以表示一個浮點數精度的那些數字。一般地,指一個用小數形式表示的浮點數中,從第一個非零的數字算起的所有數字。如 1.24 和 0.00124 的有效數字都有 3 位。

08、char

char 可以表示一個 16 位的 Unicode 字符,其值范圍在 '\u0000'(0)和 '\uffff'(65,535)(包含)之間。代碼示例:

  1. char letterA = 'A'; // 用英文的單引號包裹住。 

那三妹可能要問,“char 既然只有一個字符,為什么占 2 個字節呢?”

“主要是因為 Java 使用的是 Unicode 字符集而不是 ASCII 字符集。”

這又是為什么呢?我們留到下一節再講。

基本數據類型在作為成員變量和靜態變量的時候有默認值,引用數據類型也有的。

String 是最典型的引用數據類型,所以我們就拿 String 類舉例,看下面這段代碼:

  1. /** 
  2.  * @author 微信搜「沉默王二」,回復關鍵字 PDF 
  3.  */ 
  4. public class LocalRef { 
  5.     private String a; 
  6.     static String b; 
  7.  
  8.     public static void main(String[] args) { 
  9.         LocalRef lv = new LocalRef(); 
  10.         System.out.println(lv.a); 
  11.         System.out.println(b); 
  12.     } 

輸出結果如下所示:

  1. null 
  2. null 

null 在 Java 中是一個很神奇的存在,在你以后的程序生涯中,見它的次數不會少,尤其是伴隨著令人煩惱的“空指針異常”,也就是所謂的 NullPointerException。

也就是說,引用數據類型的默認值為 null,包括數組和接口。

那三妹是不是很好奇,為什么數組和接口也是引用數據類型啊?

先來看數組:

  1. /** 
  2.  * @author 微信搜「沉默王二」,回復關鍵字 java 
  3.  */ 
  4. public class ArrayDemo { 
  5.     public static void main(String[] args) { 
  6.         int [] arrays = {1,2,3}; 
  7.         System.out.println(arrays); 
  8.     } 

arrays 是一個 int 類型的數組,對吧?打印結果如下所示:

  1. [I@2d209079 

[I 表示數組是 int 類型的,@ 后面是十六進制的 hashCode——這樣的打印結果太“人性化”了,一般人表示看不懂!為什么會這樣顯示呢?查看一下 java.lang.Object 類的toString() 方法就明白了。

 

數組雖然沒有顯式定義成一個類,但它的確是一個對象,繼承了祖先類 Object 的所有方法。那為什么數組不單獨定義一個類來表示呢?就像字符串 String 類那樣呢?

一個合理的解釋是 Java 將其隱藏了。假如真的存在一個 Array.java,我們也可以假想它真實的樣子,它必須要定義一個容器來存放數組的元素,就像 String 類那樣。

  1. public final class String 
  2.     implements java.io.Serializable, Comparable<String>, CharSequence { 
  3.     /** The value is used for character storage. */ 
  4.     private final char value[]; 

數組內部定義數組?沒必要的!

再來看接口:

  1. /** 
  2.  * @author 微信搜「沉默王二」,回復關鍵字 Java 
  3.  */ 
  4. public class IntefaceDemo { 
  5.     public static void main(String[] args) { 
  6.         List<String> list = new ArrayList<>(); 
  7.         System.out.println(list); 
  8.     } 

List 是一個非常典型的接口:

  1. public interface List<E> extends Collection<E> {} 

而 ArrayList 是 List 接口的一個實現:

  1. public class ArrayList<E> extends AbstractList<E> 
  2.         implements List<E>, RandomAccess, Cloneable, java.io.Serializable 
  3. {} 

對于接口類型的引用變量來說,你沒法直接 new 一個:

 

只能 new 一個實現它的類的對象——那自然接口也是引用數據類型了。

來看一下基本數據類型和引用數據類型之間最大的差別。

基本數據類型:

1、變量名指向具體的數值。2、基本數據類型存儲在棧上。

引用數據類型:

1、變量名指向的是存儲對象的內存地址,在棧上。2、內存地址指向的對象存儲在堆上。

看到這,三妹是不是又要問,“堆是什么,棧又是什么?”

堆是堆(heap),棧是棧(stack),如果看到“堆棧”的話,請不要懷疑自己,那是翻譯的錯,堆棧也是棧,反正我很不喜歡“堆棧”這種叫法,容易讓新人掉坑里。

堆是在程序運行時在內存中申請的空間(可理解為動態的過程);切記,不是在編譯時;因此,Java 中的對象就放在這里,這樣做的好處就是:

當需要一個對象時,只需要通過 new 關鍵字寫一行代碼即可,當執行這行代碼時,會自動在內存的“堆”區分配空間——這樣就很靈活。

棧,能夠和處理器(CPU,也就是腦子)直接關聯,因此訪問速度更快。既然訪問速度快,要好好利用啊!Java 就把對象的引用放在棧里。為什么呢?因為引用的使用頻率高嗎?

不是的,因為 Java 在編譯程序時,必須明確的知道存儲在棧里的東西的生命周期,否則就沒法釋放舊的內存來開辟新的內存空間存放引用——空間就那么大,前浪要把后浪拍死在沙灘上啊。

這么說就理解了吧?

“好了,三妹,關于 Java 中的數據類型就先說這么多吧,你是不是已經清楚了?”轉動了一下僵硬的脖子后,我對三妹說。

“差不多,二哥,我覺得還得再消化會。”

本文轉載自微信公眾號「沉默王二」,可以通過以下二維碼關注。轉載本文請聯系沉默王二公眾號。

 

責任編輯:武曉燕 來源: 沉默王二
相關推薦

2021-05-10 11:38:07

Java數組IDEA

2021-06-06 20:56:48

Java內存 intern

2020-11-18 09:44:49

Java命名約定

2020-10-26 09:36:45

Java變量數據

2021-07-08 22:43:41

ThrowThrowsJava

2021-07-26 17:22:02

Java

2021-07-03 17:53:52

Java異常處理機制

2021-06-11 18:08:00

Java字符串拼接

2022-10-27 20:42:04

JavaScripJava編程語言

2021-07-30 09:32:55

JavaEquals

2020-11-13 10:29:37

流程控制語句

2011-07-21 14:45:13

java

2011-05-26 14:27:56

java

2010-09-17 14:49:04

Java數據類型

2010-10-15 13:28:34

MySql數據類型

2020-12-09 05:19:35

static關鍵字Java

2023-03-27 10:04:27

數據類型浮點型布爾型

2018-05-25 09:50:30

Java數據類型類型轉換

2020-10-26 13:46:07

Java基礎入門篇

2022-03-01 23:31:29

Python編程語言變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲看片 | 午夜在线精品偷拍 | 99视频在线 | 日韩久久精品 | 日本高清视频在线播放 | 久久精品一区二区 | 中文字幕一区二区三区乱码图片 | 日韩高清一区 | 亚洲精品久久久9婷婷中文字幕 | 久久狠狠 | 国产99视频精品免费视频7 | 成人免费视频在线观看 | 久久久久国产精品一区二区 | 国产成人免费视频网站视频社区 | 国产无套一区二区三区久久 | 国产精品一区一区三区 | 精品国产乱码久久久久久丨区2区 | 99成人在线视频 | 精品久久久久久久久亚洲 | 日韩一级免费电影 | 精品亚洲二区 | 日韩国产在线 | 91伊人| 国产精品a一区二区三区网址 | 国产专区在线 | 99国内精品久久久久久久 | 欧美偷偷操 | 亚洲男人天堂 | 亚洲视频在线观看一区二区三区 | 97人人草 | 欧美综合在线视频 | 欧美日韩三级 | 亚洲精品国产成人 | 亚洲精品一区二区三区在线观看 | 国产精品3区 | ww 255hh 在线观看 | 九九热精品视频 | 亚洲97| 91资源在线| 欧美一级三级在线观看 | 精品99久久久久久 |