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型常量可以後加’l’或’L’,建議使用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、百度等