1. 程式人生 > >Java變數、資料型別和運算子

Java變數、資料型別和運算子

/*

*掌握變數的概念

*掌握常用資料型別

*會使用賦值運算子、算術運算子

*掌握boolean型別和關係運算符的使用

*會進行資料型別轉換

*掌握鍵盤輸入Scanner

*/

一、記憶體的作用

        記憶體又稱主存,是CPU能直接定址的儲存空間,由半導體器件製成。記憶體的特點是存取記憶體速度快、臨時儲存檔案。記憶體是電腦中的主要部件,它是相對於外存而言的。我們平常使用的程式,如Windows作業系統、打字軟體、遊戲軟體等,一般都是安裝在硬碟等外存上的,但僅此是不能使用其功能的,必須把它們調入記憶體中執行,才能真正使用其功能,我們平時輸入一段文字,或玩一個遊戲,其實都是在記憶體中進行的。就好比在一個書房裡,存放書籍的書架和書櫃相當於電腦的外存,而我們工作的辦公桌就是記憶體。

通常我們把要永久儲存的、大量的資料儲存在外存上,而把一些臨時的或少量的資料和程式放在記憶體上,當然記憶體的好壞會直接影響電腦的執行速度。

變數定義:為儲存一個數據的申請儲存空間。

變數類比旅館

記憶體

旅館

變數

房間

資料型別

房間型別(單人間、雙人間、總統套房等)

變數名

房間號(同種型別有多個這樣的房間)

儲存內容

入住的人

變數命名規則(必須遵守):

1、開頭必須是字母、下滑線、$

2、其餘部分必須是字母、下劃線、$、數字

3、不能為Java中的關鍵字

變數命名規範(行業預設)通常第一格單詞首字母小寫,其後單詞首字母大寫(駝峰命名)

二、Java四類八種資料型別

注:資料型別的作用,因為記憶體大小不像磁碟那麼誇張,僅有幾個GB甚至更小。類比書桌的比喻,要想同時處理更多的檔案,就必須合理的申請一塊空間去處理對應的問題,由此就出現資料型別劃分好申請的記憶體空間大小。

基本資料型別和引用資料型別的分析

一、基本資料型別 與 引用型別 在記憶體中的儲存內容

Java中的變數分為基本資料型別引用型別兩種。基本型別的變數儲存數值本身,而引用型別的變數儲存的是引用值,即指向記憶體空間的地址

基本資料型別四類八種(如上圖);

引用資料型別包括:類、介面和陣列(如上圖)。

  • 基本型別 與 引用型別 的區別

1、基本型別在宣告其變數時就為它分配了空間,賦有具體的值(具體來說是在變數被使用之前必須被賦值);

2、而引用不同,在進行引用的宣告時只給變數聲明瞭引用空間,而不分配資料空間(注意:引用也是佔用空間,一個空物件的引用大小大概是4byte)。

三、引用傳遞和值傳遞(暫時作為了解)

*值傳遞:方法呼叫時,實際引數將它的值傳遞給對應的形式引數,函式接收到的是原始值的副本,此時記憶體中存在兩個相等的基本型別,若方法中對形參執行處理操作,並不會影響 實際引數 的值。

*引用傳遞:方法呼叫時,實際引數的引用(是指地址,而不是引數的值)被傳遞給方法中相應的形式參數,函式接收到的是原始值的記憶體地址,在方法中,形參與實參的內容相同,方法中對形參的處理會影響實參的值。

輸出結果:100、99、100、100

* 這裡要特殊考慮String,以及Integer、Double等幾個基本型別包裝類,它們都是immutable型別, 因為沒有提供自身修改的函式,每次操作都是新生成一個物件,所以要特殊對待,可以認為是和基本資料型別相似,傳值操作。

四、結論

1)形參為基本型別時,對形參的處理不會影響實參。

2)形參為引用型別時,對形參的處理會影響實參。

3)String,Integer,Double等immutable型別的特殊處理,可以理解為值傳遞,形參操作不會影響實參物件。

第一類:邏輯型boolean

Boolean型別資料只允許取之true或false;

不可以0或非0的整數替代true和false,這點和C語言不同

第二類:文字型char

Char型別佔2個位元組,字元常量為單引號括起來的單個字元

Java字符采用Unicode編碼,每個字元佔兩個位元組,因而可用十六進位制編碼形式表示

Unicode是全球語言統一編碼

Java語言中還允許使用轉義字元‘\’來將其後的字元轉變為其他的含義

第三類:整數型(byte、short、int、long)

byte從-128到127

short從-32768到32767

int從-2147483648到2147483647共10

long從-9223372036854775808到9223372036854775807共19

Java各整數型別有固定的表數範圍和欄位長度,其不受具體作業系統的影響以保證Java程式的可移植性

Java語言的整型常量預設為int型,宣告long型常量可以後加lL’,建議使用L,小寫和數字1難以區別

第四類:浮點型(float、double)

在數學中0到1有無數個浮點數;而計算機是離散的,所以表示的時候有誤差,計算機用精度(小數點後幾位來表示正確)

與整數型別類似,Java浮點型有固定的表數範圍和欄位長度,不受平臺影響

A.單精度浮點數(float)雙精度浮點數(double)的區別如下:

(1)在記憶體中佔有的位元組數不同

(2)有效數字位數不同

(3)所能表示數的範圍不同

單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38

雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308

(4)在程式中處理速度不同 一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快

Java浮點型常量預設為double型,如要宣告一個常量為float型,則需在數字後面加f或F

Java資料型別轉換規則

A、blooean型別不可以轉換為其他的資料型別

B、整型,字元型,浮點型的資料在混合運算中相互轉換,轉換時遵循以下原則:

1、容量小的型別自動轉換為容量大的資料型別,資料型別按容量大小排序為

byte,short,char->int->long->float->double

byte,short,char之間不會相互轉換,它們三者在計算時首先會轉換為int型別

2、容量大的資料轉換為容量小的資料型別時,要加上強制轉換符,但可能造成精度降低或溢位;使用時要格外注意

3、有多種型別的資料混合運算時,系統首先自動的將所有資料轉換成容量最大的那一種資料型別,然後再進行計算

三、賦值運算子(=):把右側的表示式賦值給左側變數名

注:

字首自增(++)自減法(--):先進行自增或自減運算,再進行表示式運算立馬變)

字尾自增(++)自減法(--):先進行表示式運算,再進行自增或自減運算(用的時候變)

***位運算子(只作為了解)

Java定義了位運算子,應用於整數型別byte、short、int、long、char等,位運算子作用在所有的位上,並且按位運算。

邏輯運算子

注:短路邏輯運算子

&&特點:兩邊都為為true時,結果才為true。那麼當得到第一個操作位false時,其結果就必定是false,後面的true或者false對最終結果沒有任何影響,所以java的設定就是:&&第一個為false時不對後面的表示式進行計算或者判斷

同理 || 的特點:一真即為真。那麼第一個為true,後面的true或者false對最終結果沒有任何影響,所以java的設定就是:&&第一個為true時不對後面的表示式進行計算或者判斷

條件運算子(三元運算子)

條件運算子也被稱為三元運算子。該運算子有3個運算元,並且需要判斷布林表示式的值。該運算子的主要是決定哪個值應該賦值給變數。

Variable×=(expression)?Value  if  true  :value  if  false

Java運算子優先順序

最高優先順序:小括號

最低優先順序:賦值運算子

優先順序順序:算術運算子>關係運算符>邏輯運算子

資料的輸入

import java.util.Scanner;                              //引用Java路徑util下的掃描器Scanner

public class Test{                                          //外層框架

    public static void main(String[] args){         //main方法入口

        Scanner in=new Scanner(System.in);      //把新的掃面儀複製給in

        System.out.println("請輸入你的姓名:");     //提示輸入內容

        String name=in.next();                                //把in掃描器輸入的內容複製給String型別的name

        System.out.println("請輸入你的戶籍:");      //提示輸入內容

        String home=in.next();                                 //把in掃描器輸入的內容複製給String型別的home

        System.out.println("請輸入你的年齡:");      //提示輸入內容

        int age=in.nextInt();                                      //把in掃描器輸入的內容複製給int型別的age

        System.out.println("姓名"+name+"戶籍"+home+"年齡"+age);

    }

}

本篇文章,引用了很多網上收集的資料,感謝:菜鳥教程、CSND、百度等