《java核心技術一》之資料型別
阿新 • • 發佈:2018-12-19
《java核心技術一 第10版》
連結:https://pan.baidu.com/s/15ECUqcjwDJq_537HPfhX9w 密碼:w8oa
基礎知識
註釋
資料型別
變數
運算子
字串
輸入輸出
控制流
大數值
陣列
1.註釋
需要長篇註釋,使用// 或者 /** xxx */
2.資料型別
java是強型別語言,一共8個種基本型別
整型:int short long byte
浮點型: float double
字元型別: char
布林型: boolean
2.1 整型
注意每個型別的取值範圍,防止溢位!!! int a = 214783645; double price = a*20 絕對溢位!!! long +字尾l 40000l
型別 | 儲存需求 | 取值範圍 |
---|---|---|
int | 4位元組 | -214783648~214783648 |
short | 2位元組 | -32768~32767 |
long | 8位元組 | -9223372036864775808~9223372036864775807 |
byte | 1位元組 | -128~127 |
2.2 浮點型別
型別 | 儲存需求 | 取值範圍 |
---|---|---|
float | 4位元組 | 大約 ± 3.402 823 47E+38F (有效位數為 6 ~ 7 位) |
double | 8位元組 | 大約 ± 1.797 693 134 862 315 70E+308 (有效位數為 15 位) |
計算誤區:
float a=2.0f; float b=1.9f; float c=2.0f; float d=1.1f; double a1=2.0; double b1=1.9; double c1=2.0; double d1=1.1; System.out.println("float:"+(a-b)); System.out.println("double:"+(a1-b1)); System.out.println("float:"+(c-d)); System.out.println("double:"+(c1-d1)); System.out.println(2.0-1.9); System.out.println(2.0-1.1); 一般我們都會認為這個結果很簡單就是:0.1, 0.9 然而實際跑出來的結果是: float:0.100000024 double:0.10000000000000009 float:0.9 double:0.8999999999999999 0.10000000000000009 0.8999999999999999 這種舍入誤差的主要 原因是浮點數值採用二進位制系統表示, 而在二進位制系統中無法精確地表示分數 1/10。 這 就好像十進位制無法精確地表示分數 1/3 —樣。 如果在數值計算中不允許有任何舍入誤差,就應該使用 BigDecimal類
2.3 char型別
char 型別原本用於表示單個字元,
目前一些unicode字元需要兩個chat值
‘A’ ---> 編碼為65對應的字元常量
“A” ---> 含有一個字元A的字串
十六進位制表示範圍:
\u0000 --- \uffff
警告:
Unicode 轉義序列會在解析程式碼之前得到處理
1."\u0022+\u0022” 並不是包含+的字串 而是 “”+“” 空串
2.// \u000a is a newline 會拋語法錯誤 因為 \u000a 是換行符
3.// Look inside c:\users 產生一個語法錯誤, 因為 \u 後面並未跟著 4 個十六進位制數
2.4 boolean型別
true false
整型值和布林值不能互換
2.5 數值之間的轉換:
int --> float 精度會丟失
long -- > float 精度會丟失
long --> double 精度會丟失
int a = 123456789;
float b =a;
System.out.println(b);
1.23456792E8
兩數相加,先轉成同一型別,以最大的型別靠攏。
警告:
如果試圖將一個數值從一種型別強制轉換為另一種型別, 而又超出了目標型別的 表示範圍, 結果就會截斷成一個完全不同的值。例如,(byte) 300 的實際值為 44。
int a =214718140;
double b = 240*a;
System.out.println(b);
int a1 =214718140;
double b1 = a1;
double b2 = 240*b1;
System.out.println(b2);
-7253952.0
5.15323536E10
2.6 字串
substring 提取子字串 ,substring(a,b) 從a下標開始,b是不想擷取的下標
獲取的字串長度:b-a
String str = "Hello";
String s = str.substring(0,3);
s="Hel"
2.6.1 檢測字串是否相等
1. " Hello".equals (greeting);
2.不區分大小寫 "Hello".equalsIgnoreCase("hel1o");
2.6.2 String Api
if (str != null && str.lengthO != 0)
• int compareTo(String other)
按照字典順序, 如果字串位於 other 之前, 返回一個負數; 如果字串位於 other 之
後, 返回一個正數; 如果兩個字串相等, 返回 0。
• new String(int[] codePoints, int offset, int count)
用陣列中從 offset 開始的 count 個碼點構造一個字串。
• boolean equals(0bject other)
• boolean equalsIgnoreCase(String other) 如果字串與 other 相等 (忽略大小寫,) 返回 tme。
• boolean startsWith(String prefix)
• boolean endsWith(String suffix)
如果字串以 suffix 開頭或結尾, 則返回 true。
• int indexOf(String str)
• int indexOf(String str, int fromlndex)
• int indexOf(int cp)
• int indexOf(int cp, int fromlndex)
返回與字串 str 或程式碼點 cp 匹配的第一個子串的開始位置。這個位置從索引 0 或 fromlndex 開始計算。 如果在原始串中不存在 st,r 返回 - 1。
• int 1astIndexOf(String str)
• int 1astIndexOf(String str, int fromlndex)
• int lastindexOf(int cp)
• int 1astindexOf(int cp, int fromlndex)
返回與字串 str 或程式碼點 cp 匹配的最後一個子串的開始位置。 這個位置從原始串尾
端或 fromlndex 開始計算。
• int 1ength( )
返回字串的長度。
• String substring(int beginlndex)
• String substring(int beginlndex, int endlndex)
返回一個新字串。這個字串包含原始字串中從 beginlndex 到串尾或 endlndex-l 的所有程式碼單元。
• String toLowerCase( )
• String toUpperCase( )
這個字串將原始字串中的大寫字母改為小寫, 或者將原始字 符串中的所有小寫字母改成了大寫字母。
•String trim( )
返回一個新字串。 這個字串將刪除了原始字串頭部和尾部的空格。
2.6.3 構建字串
字元構建器:StringBuilder
StringBuilder builder = new StringBuilder();
builder.append("aaa");
builder.append("bbb");
String comleteString = builder.toString();
"aaabbb"
• StringBuilder()
構造一個空的字串構建器。
• int length()
返回構建器或緩衝器中的程式碼單元數量。
• StringBui1der append(String str)
追加一個字串並返回 this
• StringBui 1der append(char c)
追加一個程式碼單元並返回 this。
• void setCharAt(int i,char c)
將第 i 個程式碼單元設定為 c。
• StringBui1der insert(int offset,String str)
在 offset 位置插入一個字串並返回 this。
• StringBuilder insert(int offset,Char c)
在 offset 位置插入一個程式碼單元並返回 thi。s
• StringBui1der delete(1nt startindex,int endlndex)
刪除偏移量從 startindex 到 endlndex-1 的程式碼單元並返回 this。
• String toString()
返回一個與構建器或緩衝器內容相同的字串
2.7 輸入輸出
2.7.1 讀取輸入
Scanner in = new Scanner(System.in);
nextLine() : 輸入行,可能含有空格
next(): 以空格符隔開
nextInt(): 讀取整數
nextDouble(): 讀取浮點數
2.7.2 格式化輸出
System.out.printf("%,.2f", 10000.0 / 3.0);
3,333.33