1.1 String
- jdk1.8及以前String底層使用的是char數(shù)組,jdk1.9及以后使用的是byte數(shù)組茄厘。
- 字符串之間使用+號連接時豆巨,系統(tǒng)底層會自動創(chuàng)建一個StringBuilder或StringBuffer對象松却,然后再調(diào)用其append方法完成拼接沫浆,拼接后再調(diào)用其toString方法轉(zhuǎn)換為String類型。
- String內(nèi)容不可變洲尊,字符串創(chuàng)建后不能被更改远豺,但可以被共享;
- Java中的所有雙引號字符串坞嘀,都是String類的對象躯护;
- 通過new創(chuàng)建的字符串對象,每一次new都會申請一個內(nèi)存空間丽涩,雖然內(nèi)容相同棺滞,但是地址值不同
- 以""方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現(xiàn)幾次继准,JVM都只會建立一個String對象厘擂,并在字符串池中維護
常用構(gòu)造:
// 初始化新創(chuàng)建的String對象,以使其表示空字符序列
String()
// 分配一個新的String以便它表示當(dāng)前包含在字符數(shù)組參數(shù)中的字符序列
String(char[] value)
解碼:
// 通過使用平臺的默認字符集解碼指定的字節(jié)數(shù)組來構(gòu)造新的String
String(byte[] bytes)
// 構(gòu)造一個新的String由指定用指定的字節(jié)的數(shù)組解碼charset
String(byte[] bytes, String charsetName)
String s = "字符串";
常用方法:
// 返回指定索引處的char值
char charAt(int index)
// 將此字符串與指定對象進行比較
boolean equals(Object anObject)
// 返回此字符串的長度
int length()
// 測試此字符串是否以指定的后綴結(jié)尾
boolean endsWith(String suffix)
// 測試此字符串是否以指定的前綴開頭
boolean startsWith(String prefix)
// 按字典順序比較兩個字符串
int compareTo(String anotherString)
// 當(dāng)且僅當(dāng)此字符串包含指定的char值序列時才返回true
boolean contains(CharSequence s)
// 返回一個字符串锰瘸,該字符串是此字符串的子字符串[beginIndex, endIndex)
String substring(int beginIndex, int endIndex)
// 返回字符串的副本,忽略前導(dǎo)空白和尾部空白
String trim()
// 返回Object參數(shù)的字符串表示形式
static String valueOf(Object obj)
// 將當(dāng)前字符串中匹配regex正則表達式的符號作為"分隔符"來分割字符串
String[] split(String regex)
// 將當(dāng)前字符串中匹配regex正則表達式的所有子字符串替換為replacement
String replaceAll(String regex, String replacement)
// 將當(dāng)前字符串中匹配regex正則表達式的第一個子字符串替換為replacement
String replaceFirst(String regex, String replacement)
// 告訴這個字符串是否匹配給定的regular expression
boolean matches(String regex)
編碼:
// 使用平臺的默認字符集將該String編碼為一系列字節(jié)昂灵,將結(jié)果存儲到新的字節(jié)數(shù)組中
byte[] getBytes()
// 使用指定的字符集將該String編碼為一系列字節(jié)避凝,將結(jié)果存儲到新的字節(jié)數(shù)組中
byte[] getBytes(String charsetName)
1.2 StringBuilder
- StringBuilder內(nèi)容可變
- StringBuilder和StringBuffer的方法相同,但StringBuilder線程不安全(效率高)眨补,而StringBuffer線程安全(效率低)
- String轉(zhuǎn)換為StringBuilder:使用StringBuilder構(gòu)造方法StringBuilder(String str)
- StringBuilder轉(zhuǎn)換為String:使用StringBuilder成員方法String toString()
- String管削、StringBuilder、StringBuffer應(yīng)用場景:
- String適用于少量的字符串拼接的情況
- StringBuilder適用于單線程下在字符緩沖區(qū)進行大量操作的情況
- StringBuffer適用于多線程下在字符緩沖區(qū)進行大量操作的情況
常用構(gòu)造:
// 構(gòu)造一個沒有字符的字符串構(gòu)建器撑螺,初始容量為16個字符
StringBuilder()
// 構(gòu)造一個初始化為指定字符串內(nèi)容的字符串構(gòu)建器
StringBuilder(String str)
常用方法:
// 返回長度(字符數(shù))
int length()
// 將參數(shù)的字符串表示追加到此序列含思,并返回對象本身
StringBuilder append(參數(shù))
// 導(dǎo)致該字符序列被序列的相反代替
StringBuilder reverse()
1.3 Pattern
java.util.regex.Pattern:正則表達式類
正則表達式(Regular Expression)通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本
2.1 Date
常用構(gòu)造:
// 分配一個 Date對象并對其進行初始化甘晤,以便它表示分配的時間含潘,以最接近的毫秒為單位
Date()
// 配一個Date對象,并將其初始化為表示從標準基準時間即1970年1月1日00:00:00 GMT起的指定毫秒數(shù)
Date(long date)
常用方法:
// 返回自1970年1月1日以來线婚,由 Date對象表示的00:00:00 GMT的毫秒數(shù)
long getTime()
// 將此Date對象設(shè)置為1970年1月1日00:00:00 GMT后的 time毫秒的時間點
void setTime(long time)
2.2 SimpleDateFormat
常用日期和時間模式:
y Year
M Month in year (context sensitive)
w Week in year
W Week in month
D Day in year
d Day in month
H Hour in day (0-23)
m Minute in hour
s Second in minute
常用構(gòu)造:
// 構(gòu)造一個 SimpleDateFormat使用默認模式和日期格式符號為默認的 FORMAT區(qū)域設(shè)置
SimpleDateFormat()
// 使用給定模式構(gòu)建一個SimpleDateFormat遏弱,默認日期格式符號為默認的 FORMAT區(qū)域設(shè)置
SimpleDateFormat(String pattern)
常用方法:
// 將日期轉(zhuǎn)換為字符串
String format(Date date)
// 將文本解析為日期
Date parse(String text)
// 將給定模式字符串應(yīng)用于此日期格式
void applyPattern(String pattern)
2.3 Calendar
Calendar類是一個抽象類,可以用于操縱該日歷字段
常用方法:
// 使用默認時區(qū)和區(qū)域設(shè)置獲取日歷
static Calendar getInstance()
// 返回給定日歷字段的值
int get(int field)
// 根據(jù)日歷的規(guī)則塞弊,將指定的時間量添加或減去給定的日歷字段
abstract void add(int field, int amount)
// 設(shè)置日歷字段的值YEAR漱逸,MONTH,DAY_OF_MONTH
void set(int year, int month, int date)
// 使用給定的Date設(shè)置此Calendar的時間
void setTime(Date date)
// 用給定的long值設(shè)置此Calendar的當(dāng)前時間值
void setTimeInMillis(long millis)
3.1 Math
常用字段:
// 比其他任何一個更接近e的double值游沿,自然對數(shù)的基礎(chǔ)
static double E
// 比其他任何一個更接近pi的double值饰抒,圓周長與其直徑的比率
static double PI
常用方法:
// 返回值為a的絕對值
static double abs(基礎(chǔ)類型 a)
// 向上取整
static double ceil(double a)
// 向下取整
static double floor(double a)
// 四舍五入
static int round(基礎(chǔ)類型 a)
// 返回較大值
static long max(基礎(chǔ)類型 a, 基礎(chǔ)類型 b)
// 返回較小值
static double min(基礎(chǔ)類型 a, 基礎(chǔ)類型 b)
// [0, 1)的隨機數(shù)
static double random()
// a的b次冪
static double pow(double a, double b)
3.2 大數(shù)運算
java.math.BigInteger
java.math.BigDecimal
常用構(gòu)造:
// 將 BigInteger 的十進制字符串表示形式轉(zhuǎn)換為 BigInteger
BigInteger(String val)
常用方法:
// 返回其值為 (this + val) 的 BigInteger
BigInteger add(BigInteger val)
// 返回其值為 (this - val) 的 BigInteger
BigInteger subtract(BigInteger val)
// 返回其值為 (this * val) 的 BigInteger
BigInteger multiply(BigInteger val)
// 返回其值為 (this / val) 的 BigInteger
BigInteger divide(BigInteger val)
BigDecimal的divide除不盡時會拋算術(shù)異常,這時需要傳遞scale和roundingMode
// scale:保留的位數(shù)诀黍;roundingMode:怎么保留
// ROUND_UP類似于向上取整
// ROUND_DOWN類似于向下取整
// ROUND_HALF_UP四舍五入
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
4. 包裝類
基本類型 包裝類
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
常用字段:
// int 類型能夠表示的最大值
static int MAX_VALUE
// int 類型能夠表示的最小值
static int MIN_VALUE
常用構(gòu)造:
Integer(String s)
Integer(int value)
常用方法:
static String toBinaryString(int i)
static String toHexString(int i)
static String toOctalString(int i)
// 字符串轉(zhuǎn)基本類型int
static int parseInt(String s)
static Integer valueOf(String s)
// 若Integer的內(nèi)容在字節(jié)范圍袋坑,則valueOf不會new對象
int intValue()
// 樣例
int i = Integer.valueOf("226").intValue();
int j = Integer.parseInt("226");
// 自動裝箱:將基本數(shù)據(jù)類型轉(zhuǎn)成對象
Integer i = 226;
// 自動拆箱:將對象轉(zhuǎn)成基本數(shù)據(jù)類型
// 先拆箱,再裝箱
i = i + 1;
自動裝箱和自動拆箱是javac進行編譯上的優(yōu)化
5. Random
常用構(gòu)造:
// 創(chuàng)建一個新的隨機數(shù)生成器
Random()
常用方法:
// 范圍:int所有范圍
int nextInt()
// 范圍:[0, range)
int nextInt(int bound)
6. Arrays數(shù)組工具類
常用方法:
// 按照默認升序?qū)?shù)組元素排序
// 如果是對自定義類型排序眯勾,那么這個自定義的類需要有Comparable或Comparator接口的支持
static void sort(int[] a)
// 返回指定數(shù)組內(nèi)容的字符串表示形式咒彤,默認格式:[元素0, 元素1, 元素2]
static String toString(int[] a)
// 使用二叉搜索算法搜索指定對象的指定數(shù)組
static int binarySearch(Object[] a, Object key)
7. Base64
Base64是jdk8出現(xiàn)的,可以按照一定規(guī)則進行編碼和解碼
3中Base64編解碼器:
基本:輸出被映射到一組字符A-Za-z0-9+/咒精,編碼不添加任何行標镶柱,輸出的解碼僅支持A-Za-z0-9+/
URL:輸出映射到一組字符A-Za-z0-9+_,輸出是URL和文件
MIME:輸出每行不超過76字符模叙,并且使用'\r'并跟隨'\n'作為分割歇拆,編碼輸出最后沒有行分割
獲取編碼器和解碼器的方法:
// 基本型base64解碼器
static Base64.Decoder getDecoder()
// 基本型base64編碼器
static Base64.Encoder getEncoder()
// Mime型base64解碼器
static Base64.Decoder getMimeDecoder()
// Mime型base64編碼器
static Base64.Encoder getMimeEncoder()
// Url型base64解碼器
static Base64.Decoder getUrlDecoder()
// Url型base64編碼器
static Base64.Encoder getUrlEncoder()
編碼和解碼的方法:
Base64.Decoder解碼器:byte[] decode(String src)
Base64.Encoder編碼器:String encodeToString(byte[] src)
Base64使用示例:
import java.util.Base64;
public class Base64Test {
public static void main(String[] args) {
String s = "name=用戶名?password=密碼";
basic(s);
url(s);
mime(s);
}
public static void basic(String s) {
Base64.Decoder decoder = Base64.getDecoder();
Base64.Encoder encoder = Base64.getEncoder();
// 編碼:bmFtZT3nlKjmiLflkI0/cGFzc3dvcmQ95a+G56CB
String ets = encoder.encodeToString(s.getBytes());
System.out.println(ets);
// 解碼:name=用戶名?password=密碼
byte[] decode = decoder.decode(ets);
System.out.println(new String(decode));
}
public static void url(String s) {
Base64.Decoder urlDecoder = Base64.getUrlDecoder();
Base64.Encoder urlEncoder = Base64.getUrlEncoder();
// 編碼:bmFtZT3nlKjmiLflkI0_cGFzc3dvcmQ95a-G56CB
String ets = urlEncoder.encodeToString(s.getBytes());
System.out.println(ets);
// 解碼:name=用戶名?password=密碼
byte[] decode = urlDecoder.decode(ets);
System.out.println(new String(decode));
}
public static void mime(String s) {
Base64.Decoder mimeDecoder = Base64.getMimeDecoder();
Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
// 編碼:bmFtZT3nlKjmiLflkI0/cGFzc3dvcmQ95a+G56CB
String est = mimeEncoder.encodeToString(s.getBytes());
System.out.println(est);
// 解碼:name=用戶名?password=密碼
byte[] decode = mimeDecoder.decode(est);
System.out.println(new String(decode));
}
}
8. System
常用字段:
// “標準”錯誤輸出流
static PrintStream err
// “標準”輸入流
static InputStream in
// “標準”輸出流
static PrintStream out
常用方法:
// 返回當(dāng)前時間(以毫秒為單位)
static long currentTimeMillis()
// 終止當(dāng)前運行的Java虛擬機,非零表示異常終止
static void exit(int status)
// 重新分配“標準”錯誤輸出流
static void setErr(PrintStream err)
// 重新分配“標準”輸入流
static void setIn(InputStream in)
// 重新分配“標準”輸出流
static void setOut(PrintStream out)
// 運行垃圾回收器
static void gc()
// 將指定源數(shù)組中的數(shù)組從指定位置復(fù)制到目標數(shù)組的指定位置
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
// 確定當(dāng)前的系統(tǒng)屬性
static Properties getProperties()
9. Object
Object是類層次結(jié)構(gòu)的根。每個類都有Object作為超類故觅。所有對象(包括數(shù)組)都實現(xiàn)了這個類的方法厂庇。
常用構(gòu)造:
// 構(gòu)造一個新對象
Object()
常用方法:
// 指示一些其他對象是否等于此
boolean equals(Object obj)
// 返回對象的哈希碼值
int hashCode()
// 返回對象的字符串表示形式
String toString()
// 返回此Object的運行時類
Class<?> getClass()
// 隨機喚醒正在等待對象監(jiān)視器的單個線程
void notify()
// 喚醒正在等待對象監(jiān)視器的所有線程
void notifyAll()
// 會讓線程進入無限等待
void wait()
// 導(dǎo)致當(dāng)前線程等待,直到另一個線程調(diào)用該對象的notify()方法或notifyAll()方法输吏,
// 或者某些其他線程中斷當(dāng)前線程权旷,或者已經(jīng)過了一定量的實時時間
void wait(long timeout, int nanos)
// 當(dāng)垃圾收集確定不再有對該對象的引用時,垃圾收集器在對象上調(diào)用該對象
protected void finalize()
- equals不重寫則比較兩個對象的哈希值贯溅;重寫則比較兩個對象的成員信息
- hashCode不重寫則返回的是對象的哈希值拄氯;重寫則是根據(jù)對象的成員變量來計算出一個整數(shù)
- 兩個對象通過equals比較是相等的,那么hashCode肯定相等它浅;若通過hashCode比較是相等的译柏,則equals不一定相等
- 因為相等的對象應(yīng)該具有相等的哈希值,因此建議只要重寫equals姐霍,就必須重寫hashCode
- 若一個對象中有大量的成員信息鄙麦,可以先通過hashCode進行比較,如果不相等則兩個對象一定不同镊折,若相等則再通過equals進行比較胯府,這樣既判斷了對象是否相同,又可以提高效率
若有錯誤或補充恨胚,歡迎私信