Java常用类

  • String StringBuffer StringBuilder
  • System Date SimpleDateFormate Calendar
  • Math BigInteger BigDecimal

一.字符串

String: 代表不可变的字符序列. 底层使用char[]存放. String 是final的.

StringBuffer: 代表可变序列的字符序列, 可以对字符串内容修改. 底层也是char[]存放

1.String内存解析

One More Thing 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args){
String str1 = "JavaEE";
String str2 = "JavaEE";
String str3 = new String("JavaEE");
String str4 = "JavaEE" + "Android";
String str5 = "Android";
String str6 = str1 + str5;
str5 = str5 + "Handoop";
String str7 = str6.intern();
String str8 = "JavaEEAndroid";
System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false
System.out.println(str1.equals(str3));//true

System.out.println(str4 == str6);//false
System.out.println(str4.equals(str6));//true
System.out.println(str7 == str4);//true
System.out.println(str4 == str8);//true

Person p1 = new Person("AA");
Person p2 = new Person("AA");
System.out.println("^_^"+ (p1.name == p2.name));//true
}

String内存

2.String常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public int length()
public char charAt(int index)
public boolean equals(Object anObject)
public int compareTo(String anotherString)
public int indexOf(String s)
public int indexOf(String s ,int startpoint)
public int lastIndexOf(String s)
public int lastIndexOf(String s ,int startpoint)
public boolean startsWith(String prefix)
public boolean endsWith(String suffix)
public boolean regionMatches(int firstStart,String other,int otherStart ,int length)
public String substring(int startpoint)
public String substring(int start,int end)
public String replace(char oldChar,char newChar)
public String replaceAll(String oldStr,String newStr)
public String trim()
public String concat(String str)
public String[] split(String regex)
public char[] toCharArray()
public boolean contains(String str)

3.String与其他类型间的转换

  1. String、基本数据类型、包装类之间的转换
  • ①String —> 基本数据类型、包装类: 调用相应包装类的parseXxx(String str)方法
  • ②基本数据类型、包装类 —> String: 调用字符串重载的valueOf()方法
  1. String与byte[]之间的转换
  • ①String —> byte[]: 调用字符串的getBytes()方法
  • ②byte[] —> String: 调用字符串的构造器
  1. String与char[]之间的转换
  • ①String —> char[]: 调用字符串的toCharArray()方法
  • ②char[] —> String: 调用字符串的构造器
One More Thing 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void main(String[] args){
//1.String、基本数据类型、包装类
String str1 = "123";
int i = Integer.parseInt(str1);
System.out.println(i);

String str2 = i + "";
str2 = String.valueOf(i);
System.out.println(str2);
//2.String与byte[]之间的转换
String str3 = "abcdefg";
byte[] b = str.getBytes();
for(int j = 0;j < b.length; j++){
System.out.println((char)b[j]);//不能正确打印出汉字
}

String str4 = new String(b);
System.out.println(str4);
//3.String与char[]之间的转换
String str5 = "love中国";
char[] c = str5.toCharArray();
for(int j = 0;j < c.length; c++){
System.out.println(c[j]);
}

String str6 = new String(c);
System.out.println(str6);
}

4.StringBuffer类

StringBuffer(相当于一个容器)类有三个构造方法:

  1. StringBuffer()初始容量为16的字符串缓冲区
  2. StringBuffer(int size)构造指定容量的字符串缓冲区
  3. StringBuffer(String str)将内容初始化为指定字符串内容

5.StringBuffer常用方法

StringBuffer很多方法与String相同

1
2
3
4
5
6
7
8
9
10
StringBuffer append(String s)//参数可以为:int n、Object o、char n、long n、boolean n
StringBuffer insert(int index, String str)
public StringBuffer reverse()//调用此方法的StringBuffer也会反转
StringBuffer delete(int startIndex, int endIndex)
public char charAt(int n)
public void setCharAt(int n ,char ch)
StringBuffer replace( int startIndex ,int endIndex, String str)
public int indexOf(String str)
public String substring(int start,int end)
public int length()

6.StringBuilder类

也是可变的字符序列,而且方法也一样, JDK5.0后加的, 线程不安全, 但效率高于StringBuffer

使用String的一个弊端

string s=“a”; //创建了一个字符串
s=s+“b”; //实际上原来的"a"字符串对象已经丢弃了, 现在又产生了一个字符串s+“b”(也就是"ab").如果多次执行这些改变串内容的操作, 会导致大量副本字符串对象存留在内存中, 降低效率. 如果这样的操作放到循环中, 会极大影响程序的性能.

7.String、StringBuffer、StringBuilder性能比较

One More Thing 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void main(String[] args){
String text = "";
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:"+(endTime-startTime));

startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:"+(endTime-startTime));

startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:"+(endTime-startTime));
}

二.时间相关类

1.System类

currentTimeMillis(): 返回当前时间的long型值. 此long值是从1970年1月1日0点0分00秒开始到当前的毫秒数.此方法常用来计算时间差

计算世界时间的主要标准:

  • UTC(Universal Time Coordinated)
  • GMT(Greenwich Mean Time)—格林威治时间
  • CST(Central Standard Time)—标准时间(四个国家)

2.Date类

有两个: java.util.Date类及它的子类 java.sql.Date
表示特定的瞬间, 精确到毫秒

1
2
3
4
5
6
7
8
9
10
11
import java.util.Date;
public void testDate(){
Date date = new Date();//两个构造方法, 无参和long型参数
System.out.println(date);
System.out.println(System.currentTimeMillis());
System.out.println(date.getTime());
System.out.println(date.toString());

java.sql.Date d = new java.sql.Date(date.getTime());
System.out.println(d);//格式:year-month-day
}

Date类的API不易于国际化, 大部分方法被废弃了, java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类.

3.SimpleDateFormat类

  • 格式化: 日期 —> 文本 使用SimpleDateFormat 的format()方法
  • 解析: 文本 —> 日期 使用SimpleDateFormat的parse()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args){
//1.默认模式格式化
SimpleDateFormat sdf = new SimpleDateFormat();
String date = sdf.format(new Date());
System.out.println(date);//19-3-26 下午4:50
//2.自定义模式格式化
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
date = sdf1.format(new Date());
System.out.println(date);//星期二, 26 三月 2019 16:55:16 +0800
//3.解析:
Date date1 = sdf.parse("19-3-26 下午4:50");//要和构造器的格式字符串对应
System.out.println(date1);
date1 = sdf1.parse("星期二, 26 三月 2019 16:55:16 +0800");
// date1 = sdf1.parse("19-3-26 下午4:50");//出异常
System.out.println(date1);
}

4.Calendar类

Calendar是一个抽象基类, 主用用于完成日期字段之间相互操作的功能.

使用Calendar.getInstance()方法得到一个Calendar的实例, 一个Calendar的实例是系统时间的抽象表示

1
2
3
4
5
6
//常用方法
public void get(int field)
public void set(int field,int value)
public void add(int field,int amount)
public final Date getTime()
public final void setTime(Date date)

三.计算相关类

1.Math类

java.lang.Math提供了一系列静态方法用于科学计算; 其方法的参数和返回值类型一般为double型.

abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a,doble b) a的b次幂
log 自然对数
exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度

2.BigInteger类

Integer类作为int的包装类. 能存储的最大整型值为2^31−1, BigInteger类的数字范围较Integer类的数字范围要大得多, 可以支持任意精度的整数.

构造器
BigInteger(String val)
常用方法
public BigInteger abs()
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger remainder(BigInteger val)
public BigInteger pow(int exponent)
public BigInteger[] divideAndRemainder(BigInteger val)

3.BigDecimal类

一般的Float类和Double类可以用来做科学计算或工程计算, 但在商业计算中, 要求数字精度比较高, 故用到java.math.BigDecimal类. BigDecimal类支持任何精度的定点数.

构造器
public BigDecimal(double val)
public BigDecimal(String val)
常用方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)


评论