BigDecimal类

  • 基本概念

    由于float类型和double类型运算会有误差,若需要实现精确运算则借助java.math.BigDecimal加以描述。

  • 常用的方法

    BigDecimal(String val) - 根据参数指定的字符串来构造对象。

    BigDecimal add(BigDecimal augend) - 用于实现加法运算。

    BigDecimal subtract(BigDecimal subtrahend) - 用于实现减法运算。

    BigDecimal multiply(BigDecimal multiplicand) - 用于实现乘法运算。

    BigDecimal divide(BigDecimal divisor) - 用于实现除法运算。

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
29
30
import java.math.BigDecimal;

public class BigDecimalTest {

public static void main(String[] args) {
// 1.构造BigDecimal类型的引用指向该类型的对象
BigDecimal bd1 = new BigDecimal("5.2");
BigDecimal bd2 = new BigDecimal("1.3");

// 2.调用方法实现加减乘除运算并打印
System.out.println("计算的和是:" + bd1.add(bd2)); // 6.5
System.out.println("计算的差是:" + bd1.subtract(bd2));// 3.9
System.out.println("计算的积是:" + bd1.multiply(bd2));// 6.76
System.out.println("计算的商是:" + bd1.divide(bd2)); // 4
System.out.println("-----------------------------------------");

// 3.实现精确运算
System.out.println(0.1 + 0.2); // 0.30000000000000004
BigDecimal bd3 = new BigDecimal("0.1");
BigDecimal bd4 = new BigDecimal("0.2");
System.out.println("最终精确运算的结果是:" + bd3.add(bd4)); // 0.3
System.out.println("------------------------------------------");

// 4.当除不尽时如何处理
BigDecimal bd5 = new BigDecimal("1.0");
BigDecimal bd6 = new BigDecimal("0.3");
System.out.println("最终计算的商是:" + bd5.divide(bd6, BigDecimal.ROUND_HALF_UP)); // 3.3
}
}

String类型(重中之重)

  • 基本概念

    java.lang.String类用于描述字符串内容,Java程序中所有的字符串字面值都可以作为此类的实例加以描述,如:"abc"等。

    该类由final关键字修饰表示不能被继承。

    该类描述的字符串内容是个常量不可以更改,因此可以被共享。

1
2
3
如:
String str1 = "abc";
str1 = "123"; - 改变str1的指向而不是指向的内容。
  • 常量池(原理)

    出于性能的考虑,Java虚拟机会将每次出现的字符串字面值放入常量池中,若下次出现了重复的字符串时,直接使用池中已有的对象而不再需要创建新的对象。

  • String类的构造方法

    String(char[] value, int offset, int count)
    使用value数组中下标从offset位置开始的count个字符来构造对象。

    String(char[] value)
    使用value数组中的所有内容构造对象。

    String(String original)
    根据参数指定的字符串内容来构造对象,新创建对象为参数对象的副本。

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
29
30
31
32
33
34
35
36
37
38
39
public class StringConstructorTest {

public static void main(String[] args) {

// 1.使用无参方式构造String对象并打印
String str1 = new String();
// "" - 有字符串内容只是里面没有内容
// null - 表示连字符串对象都没有
System.out.println("str1 = " + str1); // str1 = 啥也没有
System.out.println("---------------------------------------");

// 2.使用字节数组来构造字符串对象
// 'a' - 97 'A' - 65 '0' - 48 换行符 - 10 空格 - 32
byte[] bArr = {97, 98, 99, 100, 101};
// 使用字节数组中的一部分内容来构造对象
// 表示使用数组bArr中下标从1开始的3个字节来构造对象 98 99 100
// 将每个字节的数据翻译成对应的字符,然后放入字符串中
String str2 = new String(bArr, 1, 3);
System.out.println("str2 = " + str2); // bcd
// 将整个字节数组来构造字符串
String str3 = new String(bArr);
System.out.println("str3 = " + str3); // abcde
System.out.println("---------------------------------------");

// 3.使用字符数组来构造字符串对象并打印
char[] cArr = {'h', 'e', 'l', 'l', 'o'};
// 使用字符数组中的一部分构造对象
String str4 = new String(cArr, 1, 2);
System.out.println("str4 = " + str4); // el
// 使用整个字符数组来构造对象
String str5 = new String(cArr);
System.out.println("str5 = " + str5); // hello
System.out.println("---------------------------------------");

// 4.使用字符串内容来构造字符串对象
String str6 = new String("world");
System.out.println("str6 = " + str6); // world
}
}
  • String类的charAt和length方法

    char charAt(int index)
    方法charAt用于返回字符串指定位置的字符.参数index表示指定的位置.

    int length()
    返回字符串字符序列的长度.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
public class StringCharTest {

public static void main(String[] args) {
// 1.构造String类型的对象并初始化
String str1 = new String("hello");
// 2.获取字符串的长度以及每个字符并打印
System.out.println("字符串的长度是:" + str1.length());
System.out.println("下标为0的字符是:" + str1.charAt(0));
System.out.println("下标为1的字符是:" + str1.charAt(1));
System.out.println("下标为2的字符是:" + str1.charAt(2));
System.out.println("下标为3的字符是:" + str1.charAt(3));
System.out.println("下标为4的字符是:" + str1.charAt(4));
// 编译ok,运行发生StringIndexOutOfBoundsException字符串下标越界异常
//System.out.println("下标为5的字符是:" + str1.charAt(5));
System.out.println("-------------------------------------");

for(int i = 0; i < str1.length(); i++) {
System.out.println("下标为" + i + "的字符是:" + str1.charAt(i));
}
System.out.println("-------------------------------------");

//练习:分别使用两种方式将字符串"12345"转换为整数12345并打印
String str2 = new String("12345");
// 方式一:调用Integer类中的parseInt方法即可
int ia = Integer.parseInt(str2);
System.out.println("转换的整数是:" + ia); // 12345
// 方式二:利用ASCII来实现字符串向整数的转换 '1' '2' '3' ...
// '1' - '0' => 1 '2' - '0' = 2 ...
int res = 0;
for(int i = 0; i < str2.length(); i++) {
res = res*10 + (str2.charAt(i) - '0'); //res=1; res=12; res=123;
}
System.out.println("转换的整数是:" + res); // 12345
System.out.println("---------------------------------------");

// 实现整数向字符串的转换
//String str3 = String.valueOf(res);
String str3 = "" + res;
System.out.println("转换的字符串是:" + str3); // 12345
}
}
  • String类的基本方法

    boolean contains(CharSequence s)
    用于判断当前字符串是否包含参数指定的内容.

    String toLowerCase()
    返回字符串的小写模式.

    String toUpperCase()
    返回字符串的大写模式.

    String trim()
    返回去掉前导和后继空白的字符串.

    boolean startsWith(String prefix)
    判断字符串是否以参数字符串开头.

    boolean endsWith(String prefix)
    判断字符串是否以参数字符串结尾.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class StringManyMethodTest {

public static void main(String[] args) {
// 1.构造String类型的对象
String str1 = new String(" Let Me Give You Some Color To See See!");
// 2.调用成员方法进行测试
// 判断字符串中是否包含参数指定的内容
boolean b1 = str1.contains("let");
System.out.println("b1 = " + b1); // false
b1 = str1.contains("Let");
System.out.println("b1 = " + b1); // true
System.out.println("----------------------------------------");

// 将字符串中所有字符转换为小写
String str2 = str1.toLowerCase();
// let me give you some color to see see!
System.out.println("str2 = " + str2);
// Let Me Give You Some Color To See See!
System.out.println("str1 = " + str1);
// 将字符串中所有字符转换为大写
String str3 = str1.toUpperCase();
// LET ME GIVE YOU SOME COLOR TO SEE SEE!
System.out.println("str3 = " + str3);
// Let Me Give You Some Color To See See!
System.out.println("str1 = " + str1);
System.out.println("----------------------------------------");

// 去除字符串两端的空白字符
String str4 = str1.trim();
//Let Me Give You Some Color To See See!
System.out.println("str4 = " + str4);
System.out.println("----------------------------------------");

// 判断字符串是否以...开头 以...结尾
boolean b2 = str1.startsWith("Let");
System.out.println("b2 = " + b2); // false
b2 = str1.startsWith(" ");
System.out.println("b2 = " + b2); // true
b2 = str1.endsWith("See!");
System.out.println("b2 = " + b2); // true
}
}