Java自我学习第三章基础数据类型
Java的基本數據類型(掌握)
1、整型系列
(1)byte:字節類型
占內存:1個字節
存儲范圍:-128~127
(2)short:短整型類型
占內存:2個字節
存儲范圍:-32768~32767
(3)int:整型
占內存:4個字節
存儲范圍:-2的31次方 ~ 2的31次方-1
(4)long:整型
占內存:8個字節
存儲范圍:-2的63次方 ~ 2的63次方-1
注意:如果要表示某個常量數字它是long類型,那么需要在數字后面加L
byte b = 127; //右邊的整數必須在-128~127范圍內 long num = 1234567; //右邊的整數如果在int范圍呢,編譯和運行都可以通過 long bigNum = 12345678912L;//右邊的整數如果超過int范圍,必須加L,否則編譯不通過2、浮點型系列(小數)
(1)float:單精度浮點型
占內存:4個字節
精度:科學記數法的小數點后6~7位
注意:如果要表示某個常量數字是float類型,那么需要在數字后面加F或f
(2)double:雙精度浮點型
占內存:8個字節
精度:科學記數法的小數點后15~16位
float f = 12.0F;//右邊如果賦值小數,那么必須加F或f3、單字符類型
char:字符類型
占內存:2個字節
Java中使用的字符集:Unicode編碼集
字符常量的三種表示方式:
(1)'一個字符'
例如:'A','0','尚'
(2)轉義字符
\n:換行 \r:回車 \t:Tab鍵 \\:\ \":" \':' \b:刪除鍵Backspace(3)\u字符的Unicode編碼值的十六進制型
例如:\u5c1a代表'尚'
char c = '尚';String s = '尚';//錯誤的,哪怕是一個字符,也要使用雙引號char c2 = '';//錯誤,單引號中有且只能有一個字符String s2 = "";//可以,雙引號中可以沒有其他字符,表示是空字符串(4)直接給char類型變量賦值十進制的0~65535之間的Unicode編碼值
例如:'a'的編碼值是97
char c2 = 97; System.out.println(c2);//a在計算機的內部都是二進制的0、1數據,如何讓計算機可以直接識別人類文字的問題呢?就產生出了編碼表的概念。
-
編碼表 :就是將人類的文字和一個十進制數進行對應起來組成一張表格。例如:
| 字符 | 數值 |
| 1 | 48 |
| A | 65 |
| a | 95 |
-
將所有的英文字母,數字,符號都和十進制進行了對應,因此產生了世界上第一張編碼表ASCII(American Standard Code for Information Interchange 美國標準信息交換碼)。
-
Unicode(統一碼、萬國碼、單一碼)是計算機科學領域里的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。
-
4、布爾類型
boolean:只能存儲true或false
進制(了解)
-
1、進制的分類:
(1)十進制
數字組成:0-9
進位規則:逢十進一
(2)二進制
數字組成:0-1
進位規則:逢二進一
(3)八進制
數字組成:0-7
進位規則:逢八進一
(4)十六進制
數字組成:0-9,a~f(或A~F)
進位規則:逢十六進一
2、請分別用四種類型的進制來表示10,并輸出它的結果:(了解)
(1)十進制:正常表示
System.out.println(10);
(2)二進制:0b或0B開頭
System.out.println(0B10);
(3)八進制:0開頭
System.out.println(010);
(4)十六進制:0x或0X開頭
System.out.println(0X10);
3、進制轉換
-
十進制數據轉成二進制數據:使用除以2獲取余數的方式
-
二進制數據轉成十進制數據:
1 0 1 1 1 1 1 64 32 16 8 4 2 1 把64+32+16+8+4+2+1=75
-
字節(Byte):是計算機信息技術用于計量存儲容量的一種計量單位,通常情況下一字節等于有八位, 也表示一些計算機編程語言中的數據類型和語言字符。
-
位(bit):是數據存儲的最小單位。也就是二進制。二進制數系統中,每個0或1就是一個位,叫做bit(比特),其中8 bit 就稱為一個字節(Byte)。
-
轉換關系:
-
8 bit = 1 Byte
-
1024 Byte = 1 KB
-
1024 KB = 1 MB
-
1024 MB = 1 GB
-
1024 GB = 1 TB
-
4、為什么byte是-128~127?(理解)
1個字節:8位
0000 0001 ~ 0111 111 ==> 1~127
1000 0001 ~ 1111 1111 ==> -127 ~ -1
0000 0000 ==>0
1000 0000 ==> -128(特殊規定)
解釋:計算機數據的存儲(了解)
計算機數據的存儲使用二進制補碼形式存儲,并且最高位是符號位,1是負數,0是正數。
規定:正數的補碼與反碼、原碼一樣,稱為三碼合一;
負數的補碼與反碼、原碼不一樣:
負數的原碼:把十進制轉為二進制,然后最高位設置為1
負數的反碼:在原碼的基礎上,最高位不變,其余位取反(0變1,1變0)
負數的補碼:反碼+1
例如:byte類型(1個字節,8位)
25 ==> 原碼 0001 1001 ==> 反碼 0001 1001 -->補碼 0001 1001
-25 ==>原碼 1001 1001 ==> 反碼1110 0110 ==>補碼 1110 0111
底層是用加法代替減法:-128==》-127-1==》-127+(-1)
127- -1 ==> -127 + 1
基本數據類型轉換(Conversion)
在Java程序中,不同的基本數據類型的值經常需要進行相互轉換。Java語言所提供的七種數值類型之間可以相互轉換,基本數據類型轉換有兩種轉換方式:自動類型轉換和強制類型轉換。
1、自動類型轉換(隱式類型轉換)
自動轉換:
-
將取值范圍小的類型自動提升為取值范圍大的類型 。
基本數據類型的轉換規則
(1)當把存儲范圍小的值(常量值、變量的值、表達式計算的結果值)賦值給了存儲范圍大的變量時, 會按照其中最大的類型運算
int i = 'A';//char自動升級為int
double d = 10;//int自動升級為double
(2)當存儲范圍小的數據類型與存儲范圍大的數據類型一起混合運算時,會按照其中最大的類型運算
int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d;//混合運算,升級為double
(3)當byte,short,char數據類型進行算術運算時,按照int類型處理
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//編譯報錯,b1 + b2自動升級為int
char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2);//113?
(4)boolean類型不參與
? ? ? ? ?強制類型轉換(顯示類型轉換)
? ? ? ? ?將1.5 賦值到int 類型變量會發生什么?產生編譯失敗,肯定無法賦值
int i = 3.14; // 錯誤
? ? ? ?想要賦值成功,只有通過強制類型轉換,將double 類型強制轉換成int 類型才能賦值。
-
強制類型轉換:將取值范圍大的類型強制轉換成取值范圍小的類型。
? ? ? ?比較而言,自動轉換是Java自動執行的,而強制轉換需要我們自己手動執行。
? ??轉換格式
? ? ? ? ?數據類型 變量名 = (數據類型)被強轉數據值;
(1)當把存儲范圍大的值(常量值、變量的值、表達式計算的結果值)賦值給了存儲范圍小的變量時,需要強制類型轉換,提示:有風險,可能會損失精度或溢出
int i = (int)3.14;//強制類型轉換,損失精度
double d = 1.2;
int num = (int)d;//損失精度
int i = 200;
byte b = (byte)i;//溢出
?
(2)boolean類型不參與
(3)當某個值想要提升數據類型時,也可以使用強制類型轉換
int i = 1;
int j = 2;
double shang = (double)i/j;
提示:這個情況的強制類型轉換是沒有風險的。
特殊的數據類型轉換
1、任意數據類型的數據與String類型進行“+”運算時,結果一定是String類型
System.out.println("" + 1 + 2);//12
2、但是String類型不能通過強制類型()轉換,轉為其他的類型
String str = "123";
int num = (int)str;//錯誤的
int num = Integer.parseInt(str);//后面才能講到,借助包裝類的方法才能轉
運算符(Operator)
表達式:用運算符連接起來的式子
| 分類 | 運算符 |
| 算術運算符 | +、-、*、/、%、++、-- |
| 賦值運算符 | =、+=、-=、*=、/=、%=等 |
| 關系運算符 | >、>=、<、<=、==、!= |
| 邏輯運算符 | &、|、^、!、&&、|| |
| 三元運算符 | (關系表達式)?結果1:結果2; |
| 位運算符(了解) | &、|、~、^、<<、>>、>>> |
算術運算符
| 算術運算符 | 符號解釋 |
| + | 加法運算,字符串連接運算,正號 |
| - | 減法運算,負號 |
| * | 乘法運算 |
| / | 除法運算 |
| % | 求余運算,兩個數字相除的余數 |
| ++、-- | 自增自減運算 |
?
public class OperatorDemo01 {
?? ?public static void main(String[] args) {
?? ??? ?int a = 3;
?? ??? ?int b = 4;
?? ??? ?
?? ??? ?System.out.println(a + b);// 7
?? ??? ?System.out.println(a - b);// -1
?? ??? ?System.out.println(a * b);// 12
?? ??? ?System.out.println(a / b);// 計算機結果是0,為什么不是0.75呢?
?? ??? ?System.out.println(a % b);// 3
?? ?}
}
“+”號的兩種用法
-
第一種:對于+兩邊都是數值的話,+就是加法的意思
-
第二種:對于+兩邊至少有一邊是字符串得話,+就是拼接的意思
public class OperatorDemo02 {
?? ?public static void main(String[] args) {
?? ??? ?// 字符串類型的變量基本使用
?? ??? ?// 數據類型 變量名稱 = 數據值;
?? ??? ?String str1 = "Hello";
?? ??? ?System.out.println(str1); // Hello
?? ??? ?
?? ??? ?System.out.println("Hello" + "World"); // HelloWorld
?? ??? ?
?? ??? ?String str2 = "Java";
?? ??? ?// String + int --> String
?? ??? ?System.out.println(str2 + 520); // Java520
?? ??? ?// String + int + int
?? ??? ?// String?? ??? ?+ int
?? ??? ?// String
?? ??? ?System.out.println(str2 + 5 + 20); // Java520
?? ?}
}
?
自加自減運算
理解:++ 運算,變量自己的值加1。反之,-- 運算,變量自己的值減少1,用法與++ 一致。
1、單獨使用
-
變量在單獨運算的時候,變量前++和變量后++,變量的是一樣的;
-
變量前++ :例如 ++a 。
-
變量后++ :例如 a++ 。
public class OperatorDemo3 {
?? ?public static void main(String[] args) {
?? ??? ?// 定義一個int類型的變量a
?? ??? ?int a = 3;
?? ??? ?//++a;
?? ??? ?a++;
? ? ? ? // 無論是變量前++還是變量后++,結果都是4
?? ??? ?System.out.println(a);
?? ?}
}
2、復合使用
-
和其他變量放在一起使用或者和輸出語句放在一起使用,前++和后++就產生了不同。
-
變量前++ :變量先自身加1,然后再將加1后的結果進行其他使用。
-
變量后++ :變量先拿去使用,然后再自身加1。
public class OperatorDemo03 {
?? ?public static void main(String[] args) {
?? ??? ?// 其他變量放在一起使用
?? ??? ?int x = 3;
?? ??? ?//int y = ++x; // y的值是4,x的值是4,
?? ??? ?int y = x++; // y的值是3,x的值是4
?? ??? ?
?? ??? ?System.out.println(x);
?? ??? ?System.out.println(y);
?? ??? ?System.out.println("==========");
? ? ? ??
?? ??? ?// 和輸出語句一起
?? ??? ?int z = 5;
?? ??? ?//System.out.println(++z);// 輸出結果是6,z的值也是6
?? ??? ?System.out.println(z++);// 輸出結果是5,z的值是6
?? ??? ?System.out.println(z);
? ? ? ??
? ? ? ? int a = 1;
? ? ? ? a = a++;//(1)先取a的值“1”放操作數棧(2)a再自增,a=2(3)再把操作數棧中的"1"賦值給a,a=1
? ? ? ? int i = 1;
? ? ? ? int j = i++ + ++i * i++;
? ? ? ? /*
? ? ? ? 從左往右加載
? ? ? ? (1)先算i++
? ? ? ? ①取i的值“1”放操作數棧
? ? ? ? ②i再自增 i=2
? ? ? ? (2)再算++i
? ? ? ? ①i先自增 i=3
? ? ? ? ②再取i的值“3”放操作數棧
? ? ? ? (3)再算i++
? ? ? ? ①取i的值“3”放操作數棧
? ? ? ? ②i再自增 i=4
? ? ? ? (4)先算乘法
? ? ? ? 用操作數棧中3 * 3 = 9,并把9壓會操作數棧
? ? ? ? (5)再算求和
? ? ? ? 用操作數棧中的 1 + 9 = 10
? ? ? ? (6)最后算賦值
? ? ? ? j = 10
? ? ? ? */
?? ?}?
}
小結:
-
++在前,先自加,后使用;
-
++在后,先使用,后自加。
賦值運算符
| 賦值運算 | 符號解釋 |
| = | 將符號右邊的值,賦值給左邊的變量 |
| += | 將符號左邊的值和右邊的值進行相加操作,最后將結果賦值給左邊的變量 |
| *= | 將符號左邊的值和右邊的值進行相乘操作,最后將結果賦值給左邊的變量 |
| /= | 將符號左邊的值和右邊的值進行相除操作,最后將結果賦值給左邊的變量 |
| %= | 將符號左邊的值和右邊的值進行取余操作,最后將結果賦值給左邊的變量 |
| -= | 將符號左邊的值和右邊的值進行相減操作,最后將結果賦值給左邊的變量 |
int a = 3;
?? ??? ?int b = 4;
?? ??? ?b += a;// 相當于 b = b + a ;?
?? ??? ?System.out.println(a); // 3
?? ??? ?System.out.println(b); // 4?? ?
? ? ? ? int a = 3;
?? ??? ?int b = 4;
?? ??? ?b += a;// 相當于 b = b + a ;?
?? ??? ?System.out.println(a); // 3
?? ??? ?System.out.println(b); // 4?? ?
?? ??? ?
?? ??? ?short s = 3;
?? ??? ?// s = s + 4; 代碼編譯報錯,因為將int類型的結果賦值給short類型的變量s時,可能損失精度
?? ??? ?s += 4; // 代碼沒有報錯
? ? ? ? //因為在得到int類型的結果后,JVM自動完成一步強制類型轉換,將int類型強轉成short
?? ??? ?System.out.println(s);
? ? ? ??
? ? ? ? int j = 1;
?? ??? ?j += ++j * j++;//相當于 ?j = j + (++j * j++);
?? ??? ?System.out.println(j);//5
在將最后的結果賦值給左邊的變量前,都做了一步強制類型轉換 .
關系運算符(比較運算符)
| 關系運算符 | 符號解釋 |
| < | 比較符號左邊的數據是否小于右邊的數據,如果小于結果是true。 |
| > | 比較符號左邊的數據是否大于右邊的數據,如果大于結果是true。 |
| <= | 比較符號左邊的數據是否小于或者等于右邊的數據,如果大于結果是false。 |
| >= | 比較符號左邊的數據是否大于或者等于右邊的數據,如果小于結果是false。 |
| == | 比較符號兩邊數據是否相等,相等結果是true。 |
| != | 不等于符號 ,如果符號兩邊的數據不相等,結果是true。 |
比較運算符,是兩個數據之間進行比較的運算,運算結果一定是boolean值true或者false 。
? ? ? ??int a = 3;
?? ??? ?int b = 4;
?? ??? ?System.out.println(a < b); // true
?? ??? ?System.out.println(a > b); // false
?? ??? ?System.out.println(a <= b); // true
?? ??? ?System.out.println(a >= b); // false
?? ??? ?System.out.println(a == b); // false
?? ??? ?System.out.println(a != b); // true
邏輯運算符
| 邏輯運算符 | 符號解釋 | 符號特點 |
| & | 與,且 | 有false則false |
| | | 或 | 有true則true |
| ^ | 異或 | 相同為false,不同為true |
| ! | 非 | 非false則true,非true則false |
| && | 雙與,短路與 | 左邊為false,則右邊就不看 |
| || | 雙或,短路或 | 左邊為true,則右邊就不看 |
? ? ? ? int a = 3;
?? ??? ?int b = 4;
?? ??? ?int c = 5;
?? ??? ?// & 與,且;有false則false
?? ??? ?System.out.println((a > b) & (a > c)); // false & false
?? ??? ?System.out.println((a > b) & (a < c)); // false & false
?? ??? ?System.out.println((a < b) & (a > c)); // true & false
?? ??? ?System.out.println((a < b) & (a < c)); // true & true
?? ??? ?System.out.println("===============");
?? ??? ?// | 或;有true則true
?? ??? ?System.out.println((a > b) | (a > c)); // false | false
?? ??? ?System.out.println((a > b) | (a < c)); // false | false
?? ??? ?System.out.println((a < b) | (a > c)); // true | false
?? ??? ?System.out.println((a < b) | (a < c)); // true | true
?? ??? ?System.out.println("===============");
?? ??? ?// ^ 異或;相同為false,不同為true
?? ??? ?System.out.println((a > b) ^ (a > c)); // false ^ false
?? ??? ?System.out.println((a > b) ^ (a < c)); // false ^ false
?? ??? ?System.out.println((a < b) ^ (a > c)); // true ^ false
?? ??? ?System.out.println((a < b) ^ (a < c)); // true ^ true
?? ??? ?System.out.println("===============");
?? ??? ?// ! 非;非false則true,非true則false
?? ??? ?System.out.println(!false);
?? ??? ?System.out.println(!true);
&&和&區別,||和|區別
-
&&和&區別:
-
&&和&結果一樣,&&有短路效果,左邊為false,右邊不執行;&左邊無論是什么,右邊都會執行。
-
-
||和|區別:
-
||和|結果一樣,||有短路效果,左邊為true,右邊不執行;|左邊無論是什么,右邊都會執行。
-
三元運算符(三目運算符)
三元運算符格式:
數據類型 變量名 = 關系表達式?結果1:結果2
三元運算符計算方式:
-
條件判斷的結果是true,三元運算符整體結果為結果1,賦值給變量。
-
判斷條件的結果是false,三元運算符整體結果為結果2,賦值給變量。
? ? int i = (1==2 ? 100 : 200);
? ? System.out.println(i);//200
? ? int j = (3<=4 ? 500 : 600);
? ? System.out.println(j);//500
位運算符(了解)
| 位運算符 | 符號解釋 |
| & | 按位與,當兩位相同時為1時才返回1 |
| | | 按位或,只要有一位為1即可返回1 |
| ~ | 按位非,將操作數的每個位(包括符號位)全部取反 |
| ^ | 按位異或。當兩位相同時返回0,不同時返回1 |
| << | 左移運算符 |
| >> | 右移運算符 |
| >>> | 無符號右移運算符 |
左移:<<
運算規則:左移幾位就相當于乘以2的幾次方
右移:>>
運算規則:右移幾位就相當于除以2的幾次方
無符號右移:>>>
運算規則:往右移動后,左邊空出來的位直接補0,不看符號位
按位與:&
運算規則:
1 & 1 結果為1
1 & 0 結果為0
0 & 1 結果為0
0 & 0 結果為0
按位或:|
運算規則:
1 | 1 結果為1
1 | 0 結果為1
0 | 1 結果為1
0 & 0 結果為0
按位異或:^
運算規則:
1 ^ 1 結果為0
1 ^ 0 結果為1
0 ^ 1 結果為1
0 ^ 0 結果為0
按位取反:~
運算規則:~0就是1
~1就是0
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Java自我学习第三章基础数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dita编写工具有哪些_我们已经有了美好
- 下一篇: 解题:SHOI 2012 回家的路