概述
常用类(API)
java系统中提供的一些使用频率较高的类。
API: java系统中提供的一系列类和接口
api文档:官方给java开发者提供的对类和接口功能说明的文档
Object
java .lang .Object 是java类体系中最顶级的,万类之祖
当输出一个对象时,会默认调用类中的toString()方法,把对象以字符串形式输出。
类中如果没有toString(),那么会调用父类(Object)中的toString()
p1.equals(p2);//equals用来比较对象中的内容是否相等(注:Object类的equals方法比的仍然是地址)
//==用于基本类型比较时,比较的是值是否相等。
//==用于引用类型比较时,比较的是地址是否相等。
- Object类equals比较对象时:
public class Equal {
String name;
int age;
public Equal(String name,int age){
this.age=age;
this.name=name;
}
}
public class EqualTest {
public static void main(String[] args) {
Equal equal1=new Equal("e1",1);
Equal equal2=new Equal("e1",1);
System.out.println(equal1.equals(equal2));
}
}
运行结果:
解决方法:重写Object里的equals
public class Equal {
String name;
int age;
public Equal(String name,int age){
this.age=age;
this.name=name;
}
@Override
public boolean equals(Object obj) {
Equal equal=(Equal)obj;
return this.name.equals(equal.name)&&this.age==equal.age;
}
}
public class EqualTest {
public static void main(String[] args) {
Equal equal1=new Equal("e1",1);
Equal equal2=new Equal("e1",1);
System.out.println(equal1.equals(equal2));
}
}
运行结果:
Arrays
equals:
- 格式:
int[] a={1,2,3,4};
int[] b={1,2,3,4};
System.out.println(a.equals(b));//返回false,因为此时调用的是Object里的equals。
System.out.println(Arrays.equals(a,b));//返回true
- 比较的是类中的元素;
Arrays.binarySearch ():
二分查找
- 注意:
- 需要数组有序;
- 如果数组中不包含需要查找的数则返回负数。
- 格式:
int[] a={1,2,3,4};
int[] b={1,2,3,4};
Arrays.binarySearch(a,2);//在a数组中查找2
Arrays.binarySearch(a,1,2,2);//在a数组中查找1到2位置上是否有2
int index=Arrays.binarySearch(a,4);
System.out.println(index);
Arrays.copyOf():
数组扩充
- 格式:
int[] a={1,2,3,4}
System.out.println(Arrays.toString(a));//[1, 2, 3, 4]
a=Arrays.copyOf(a,8);
System.out.println(Arrays.toString(a));//[1, 2, 3, 4, 0, 0, 0, 0]
Arrays.fill():
将指定值分配给数组中每个元素
int[] a=new int[3];
Arrays.fill([3]a,2);
基本数据类型包装类
基本数据类型封装类
装箱:
将基本类型自动转为包装类
int a=138;
Integer c1=Integer.valueOf(a);//自动装箱
自动装箱时,自动调用Integer类中的valueof(),这个方法内部对-128–127之间进行缓存(数组)。超出此区间后,每次都会创建新的Integer对象(所以超出127或-128后的地址会改变)。
int a=138;
int b=138;
Integer c1=Integer.valueOf(a);//Integer c1=a;
Integer c2=Integer.valueOf(b);
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));//ture
拆箱:
将包装类型转为基本型。
int a=138;
Integer c=Integer.valueOf(a);//装箱
int d=c.intValue();//拆箱
String类
- 字符串值不可改变
- String类不可被继承
String s="abc";
s+="aaa";
s+="bbb";
s+="ccc";
System.out.println(s);//输出为abcaaabbbccc,字符串值改变的原因是因为每次执行s+=式子时都隐式创建了新的对象。
String s1="abc";
String s2="abc";//在第一次创建s1变量时,会去内存中有一个叫字符串常量池的空间检索有没有此内容的一个字符串对象,如果没有就会在字符串常量池中创建一个字符串对象,把对象地址赋给s1,在第二次创建s2变量时,重复以上操作,一旦创建的字符串对象一致,返回拿到的则是同一个字符串的地址。
String s3=new String("abc");
String s4=new String("abc");//无论值是否相等,均直接创建新对象占用新的内存
String(byte[] bytes)
- 字符数组与字符串的转换:
String str = "denqinwen";
char chars[]=str.toCharArray();//将字符串转换为字符数组
System.out.println(Arrays.toString(chars));
String string=new String(chars);//将字符数组转为字符串
System.out.println(string);
- 转码与解码:
String str1=new String();//this.value = "".value;
String str2=new String("你好");
byte bytes[]=str2.getBytes("utf-8");//转码,其中"utf-8"可以更换为其他码或直接不写。
System.out.println(Arrays.toString(bytes));//将”你好“拆分成编码(默认为Unicode码)
String str3=new String(bytes,"utf-8");//解码,其中“utf-8”同理于转码中
System.out.println(str3);
byte bytes[]=str2.getBytes(“utf-8”);//转码,其中"utf-8"可以更换为其他码或直接不写。
System.out.println(Arrays.toString(bytes));//将”你好“拆分成编码(默认为Unicode码)
String str3=new String(bytes,“utf-8”);//解码,其中“utf-8”同理于转码中
System.out.println(str3);
"utf-8"是针对Unicode的一种可变长度字符编码