1. 程式人生 > >《java核心技術一》之資料型別

《java核心技術一》之資料型別

《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