Java中常用API
重写equals之后必须重写hashcode,也就是说equals必须和hashcode保持一致性。
11.3包装类
11.3.1包装类的概念
通常情况下基本数据类型 的变量不是对象,为了满足万物皆对象的理念要对基本数据类型的变量进行打包封装处理成对象,而负责将这些变量声明成为成员变量进行对象化处理的相关类叫做包装类。
Person p = new Person();
int num = 10;
public class MyInt{
private int num = 10;
}
11.3.2 包装类的分类
包装类 | 对应的基本类型 |
---|---|
java.lang.Byte | byte |
java.lang.short | short |
java.lang.integer | int |
java.lang.Long | long |
java.lang.Float | float |
java.lang.Double | double |
java.lang.Bollean | bollean |
java.lang.Character | char |
11.3.3 Integer 类的概述
(1) 基本概念
java.lang.integer类内部包装了一个int类型的变量作为成员变量,主要用于实现对int类型的包装并提供int 类型到String类型的转换等方法。如果之后想要表示比long类型还要大的整数数据的时候,需要借助BigInteger类来实现。
(2)常用的常量
常量类型和名称 | 功能介绍 |
---|---|
public static final int MAX_VALUE | 表示int类型可以描述的最大值 |
public static final int MIN_VALUE | 表示int类型可以描述的最小值 |
public static final int SIZE | 表示int 类型次啊用二进制补码形式的位数 |
public static final int BYTES | 表示int类型所占用的字节个数 |
public static final ClassTYPE | 表示int类型的Class实例 |
(3) 常用方法
方法名称 | 功能介绍 |
---|---|
int intValue | 获取调用对象中的整数并返回 |
static Integer valueOf(int i) | 根据参数指定整数值得到Integer类型的对象 |
boolean equals(Object obj) | 比较调用对象于参数指定的对象是否相等 |
String toString() | 返回描述调用对象数值的字符串形式 |
static int parselent(String) | 将字符串类型转换为int 类型并返回 |
static String toString(int i) | 获取参数指定的整数的十进制字符串形式。 |
static String toBinaryString(int i) | 获取参数指定整数的二进制字符串形式 |
static String toHexString(int i) | 获取参数指定整数的十六进制字符串形式 |
static String toOctalString(int i) | 获取参数指定整数的八进制字符串形式 |
package com.lagou.task11;
import org.w3c.dom.ls.LSOutput;
public class IntegerTest {
public static void main(String[] args) {
// 装箱:int转Integer
Integer it4 = Integer.valueOf(123);
System.out.println("it4 = "+it4);
// 拆箱:获取调用对象中的整数数值,相当于从Integer类型到int类型的转换
int ia = it4.intValue();
System.out.println("当前获取到的整数是"+ia);
System.out.println("----------------------------------------");
// 从java5开始了自动拆箱和装箱的机制。
Integer integer = Integer.valueOf(100);
Integer it5 =100;//直接通过赋值运算符实现自动拆箱装箱。
int ib= it5; //自动拆箱
System.out.println("-------------------------------");
// 装箱和拆箱的笔试考点
Integer it6 = 128;
Integer it7 = 128;
Integer it8 = new Integer(128);
Integer it9 = new Integer(128);
System.out.println(it6==it7);
System.out.println(it6.equals(it7));
System.out.println(it8==it9);
System.out.println(it8.equals(it9));
/ 实现静态方法的调用
int ic = Integer.parseInt("200");
// int ic = Integer.parseInt("200a");//编译通过,运行的时候发生NumberFormatException 数字格式一场,因为有字母。
System.out.println("字符串转换为整数"+ic);
System.out.println("根据参数指定的整数获取对应的二进制字符串是:"+Integer.toBinaryString(200));
System.out.println("根据参数指定的整数获取对应的十六进制字符串是"+Integer.toHexString(200));
}
}
(4)自动装箱池
在Integer类的内部提供了自动装箱池的技术,将-128~127之间的整数已经装箱完毕,当程序中使用该范围之间的整数的时候,无需装箱直接取自动装箱池中的对象即可,从而提高效率。
11.4常用数学处理类
11.4.1 Math类的概述
(1) 基本概念
java.lang.Math类主要用于提供执行数学运算的方法,例如对数,平方根
(2)常用方法
方法声明 | 功能介绍 |
---|---|
static int max(int a,int b) | 返回俩个参数的最大值 |
static int min(int a,int b) | 返回俩个参数的最小值 |
static double pow(double a,double b) | 返回第一个此参数的b次幂 |
static int abs(int a) | 返回参数指定值的绝对值 |
static long round(double) | 返回参数四舍五入的结果 |
static double sqrt(double a) | 返回参数的平方根 |
static double random() | 返回0.0到1.0的随机数 |
11.4.2 BigDecimal类的概述
(1) 基本概念
由于float类型和double类型在运算的时候可能又误差,若希望实现紧缺乙酸则借助java.math,BigDecimal类型加以描述。
(2) 常用方法
方法声明 | 功能介绍 |
---|---|
BigDecimalString val | 根据参数指定的字符串来构造对象 |
BigDecimal add(BigDecimal augend) | 用于实现加法运算 |
BigDecimal subtract(BigDecimal subtrahend) | 用于实现减法运算 |
BigDecimal multiply(BigDecimal multipllcand) | 用于实现乘法运算 |
BigDecimal divide(BigDecimal divisor) | 用于实现除法运算 |
package com.lagou.task11;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal bd1= new BigDecimal("5.2");
BigDecimal bigDecimal = new BigDecimal("1.3");
System.out.println("加法"+bd1.add(bigDecimal));
System.out.println("减法"+bd1.subtract(bigDecimal));
System.out.println("乘法"+bd1.multiply(bigDecimal));
System.out.println("除法"+bd1.divide(bigDecimal));
System.out.println("====================================================");
System.out.println(0.1+0.2);//0.30000000000000004
BigDecimal bigDecimal1 = new BigDecimal("0.1");
BigDecimal bigDecimal2 = new BigDecimal("0.2");
System.out.println(bigDecimal1.add(bigDecimal2));//精确计算 0.3
System.out.println("====================================================");
BigDecimal bigDecimal3 = new BigDecimal("2");
BigDecimal bigDecimal4 = new BigDecimal("0.3");
System.out.println("除法运算的结果是:"+bigDecimal4.divide(bigDecimal3, RoundingMode.HALF_UP));//四舍五入
}
}
第十二章String类的概述和使用
12.1 String类的概念(重点)
-
Java.lang.String 类用于描述字符串,Java程序中所有的字符串字面值都可以使用该类的对象加以描述例如“abc"
-
该类由final关键字修饰,表示该类不可以被继承
-
从jdk1.9开始该类的地层层不使用char[]类型来存储,而是改成byte[]加上编码标记,从而节约了一些空间
-
该类描述的字符串内容是个常量不可更改,因此可以被共享使用
例如:
String str1 = “abc” ,其中abc这个字符串是个常量不可以被改变
str1=“123” 将字符串”123“的地址赋给str1
改变str1的指向并没有改变指向的内容。
12.2 常量池
因为string类型的变量是常量,不可以被改变,英雌java虚拟机将首次出现的字符串串放入常量池中,若后续代码中出现了相同他字符串内容则直接使用池中已有的字符串对象而无需生气内存以及创建对象。从而提高了性能。有关常量池可能出现的笔试考点:
package com.lagou.task12;
public class StringTest {
public static void main(String[] args) {
// 请问下面的代码会创建几个对象。(常量池的存在)
String str1 = "abc";//创建一个对象,存放在常量池中。
String str2 = "abc";
System.out.println(str1==str2);
String s = new String("123"); //创建了俩个对象,后面的”123“在常量池中,还会创建一个对象,在堆区。
System.out.println("============================================");
String s1 = "hellow";
String s2 = "hellow";
String s3 = new String("hellow");
String s4= new String("hellow");
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true
System.out.println(s2==s4);//false
System.out.println(s2.equals(s4));//true
System.out.println("============================================");
// 常量有优化机制,变量没有
String s5= "abcd";
String s6 = "ab"+"cd"; // 优化机制直接拼接成一个完整的常量。
System.out.println(s5 == s6);
String st7 = "ab";
String s8 = st7+"cd"; //变量没有优化机制。
System.out.println(s5==s8);
}
}
12.3 String类型常用的构造方法(熟练,记住)
方法名称 | 功能介绍 |
---|---|
String() | 使用无参方式构造对象得到字符空间序列 |
String(byte[] bytes,int offset,int length) | 使用bytes数组中下表从offset位置开始的length个字节来构造对象 |
String(byte[]bytes) | 使用bytes数组中的所有内容构造对象 |
String(char[] value,int offset,int count) | 使用value数组中下表从offset位置开始的count个字符来构造对象 |
String(char[] value) | 使用value数组中所有内容来构造对象 |
String(String original) | 根据参数指定的字符串内容来构造对象 |
12.4 String 常用成员方法
方法名称 | 功能介绍 |
---|---|
String toString() | 返回字符串本身 |
byte[]getBytes() | 将当前字符串内容转换为byte数组并返回 |
char[] toCharArray | 用于将当前字符串内容转换为char数组并返回 |
char charAt(int index) | 返回字符串指定位置的字符 |
int length | 返回字符串序列的长度 |
boolean isEmpty() | 判断字符串是否为空 |
int compareTo(String anotherString) | 用于比较调用对象和参数对象的大小关系 |
int compareToIgnoreCase(String str) | 不考虑大小写,比较字符串的的大小关系 |
String类型的基本方法的案例实现
package com.lagou.task12;
public class StringByteCharTest {
public static void main(String[] args) {
// 1. 创建String类型的对象并打印
String world = new String("world");
System.out.println("str1 = "+world);
System.out.println("-------------------------------");
// 将String类型转换为byte类型
// 先将字符串转换为字符,在将每个字符转换为byte类型
byte[] bytes = world.getBytes();
String st2= new String(bytes);
for (int i=0;i<bytes.length;++i){
System.out.println("下表为i的元素是:"+st2.charAt(i));
}
// 将String转换为char数组并打印
System.out.println("-------------------------------");
char[] chars = st2.toCharArray();
for(int i=0;i<chars.length;++i){
System.out.println("下标为:"+i+"的内容是:"+chars[i]);
}
}
}
-
案例项目:
判断字符串”上海自来水来自海上“是否是回文字符串。所谓回文字符串指的是一个字符串无论是从左向右还是从右向左读都是同一个句子。
package com.lagou.task12;
public class huiwenTest {
boolean judge(String string){
String st2="";
for (int i=string.length()-1;i>=0;--i){
st2+=string.charAt(i);
}
//System.out.println(st2);
return st2.equals(string);
}
public static void main(String[] args) {
huiwenTest huiwenTest = new huiwenTest();
System.out.println(huiwenTest.judge("上海自来水来自海上"));
}
}
-
字符串比较的案例:
package com.lagou.task12; import org.w3c.dom.ls.LSOutput; public class StringCompareTest { // 构造String类型的对象并打印 // 使用构造号的对象于其他字符串对象之间大小并打印 public static void main(String[] args) { // 构造String类型的对象并打印 String str1 = new String("hello"); System.out.println("str1="+str1); // 使用构造好的对象于其他字符串对象之间比较大小关系并打印 System.out.println(str1.compareTo("world"));//'h' - 'w'=104-119=-15 System.out.println(str1.compareTo("haha"));//'e'-'a'=101-97 = 4 System.out.println(str1.compareTo("hehe"));//'l' - 'h' = 4 System.out.println(str1.compareTo("heihei"));//'l' - 'i' = 108-105 = 3 System.out.println(str1.compareTo("helloworld"));//长度5-10 => -5 System.out.println(str1.compareTo("HELLO"));// 0 } }