JavaSE API
排序
java.lang.Comparable
java.lang.Comparator
java.lang.Object
它是所有类型的根父类
一个类如果没有显式声明它的父类,这个类的直接父类就是Object
理解
(1)Object类的所有方法,在所有对象中都有,包括数组对象
(2)Object类的变量可以接受任意类型的对象
Object类型的形参可以接受任意类型的对象作为实参
Object[]类型的数组可以接受任意类型的对象作为它的元素
(3)所有对象创建时,都会调用Object的无参构造
方法
(1)无参构造
object() 所有对象创建时,都会调用Object的无参构造
(2)protected Object clone() throws CloneNotSupportedException
如果子类要支持克隆,子类需要实现Cloneable接口,否则报CloneNotSupportedException
(3)public boolean equals(Object obj)
指示其他某个对象obj是否与此对象this“相等”。
Object中的equals,等价于“==”比较,比较的是对象的地址
如果子类需要比较的是属性的内容,那么一定要重写这个方法
(4)public int hashCode()
在Object中默认这个方法返回的是 和“地址”相关的值
如果重写了equals,那么必须重写hashCode方法,而且参与equals比较的属性,一定要参与hashCode的计算
他俩的关系
两个对象的equals()返回true,两个对象的hashCode值?一定相等
两个对象的hashCode值不相等,两个对象equals方法结果?一定不相等
两个对象的hashCode值相等,两个对象equals方法结果?不一定相等
(5)public final Class<?> getClass()
返回某个对象的运行时类型,而不是编译时类型
(6)protected void finalize() throws Throwable
当这个对象被垃圾回收机制回收之前调用,而且只会调用一次
(7)public String toString()
在Object中默认返回的是 这个对象的运行是类型@这个对象的hash值的十六进制表现形式
子类完全可以重写
(8)剩下的notify,notifyAll和wait在多线程中使用
包装类 java.lang
装箱与拆箱
装箱
JDK1.5之前手动装箱
Integer i = new Integer(整数);
JDK1.5之后自动装箱
Ineteger i = 整数;
拆箱
JDK1.5之前手动拆箱
Integer i = new Integer(整数);
int num = i.intValue();
JDK1.5之后自动拆箱
Integer i = new Integer(整数);
int num = i;
原则:只能是对应的包装类和基本数据类型之间进行转换
对应的关系
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
其他方法
字符串与基本数据类型的转换
public static int parseInt(String s)throws NumberFormatException 如果包含字母等非数字字符,会报错
public static int parseInt(String s, int radix)throws NumberFormatException
可以包含字母,但要在基数范围内
例如基数radix是20,可以包含的范围是0-9,a,b,c,d,e,f,g,h,i,j
public static Integer valueOf(String s)throws NumberFormatException
public static Integer valueOf(String s,int radix)throws NumberFormatException
像Integer中
public static String toBinaryString(int i) 二进制形式
public static String toOctalString(int i) 八进制形式
public static String toHexString(int i) 十六进制形式
像Character中
public static char toLowerCase(char ch) 转小写
public static char toUpperCase(char ch) 转大写
包装类对象的缓存问题(常量对象)
Byte,Short,Integer,Long -128~127
Float,Double 没有缓存
Character 0~127
Boolean true or false
Java.lang.String
字符串类型的特点
1、不能被继承
因为String是final修饰的类
2、字符串对象是常量对象,一旦创建就不能修改,一旦修改就是新对象
3、因为字符串对象是常量对象,那么可以共享,字符串常量对象是在常量池中
常量池在哪里
JDK1.6,方法区
JDK1.7,堆
JDK1.8,元空间
4、任何字符串字面量都是String的对象
5、字符串底层使用字符数组存储
6、字符数组是private final修饰符
拼接和比较
1、创建对象的个数
String str1 = "hello";
String str2 = "hello";
一个,在常量池
String str1 = new String("hello");
String str2 = new String("hello");
三个,一个在常量池,两个在堆中
2、拼接和比较
原则:+两边都是常量,结果也是常量,+两边有一个是变量,结果就不是常量,在堆中,如果结果使用了intern(),那么是常量
@Test public void test3(){ String str1 = "hello"; String str2 = "java"; String str3 = "hellojava"; String str4 = "hello" + "java";//常量与常量拼接,还是常量 String str5 = "hello" + str2;//常量与变量拼接,结果在堆中 String str6 = str1 + str2;//变量与变量拼接,结果也在堆中 System.out.println("str3 == str4 " + (str3 == str4));//true System.out.println("str3 == str5 " + (str3 == str5));//false System.out.println("str3 == str6 " + (str3 == str6));//false final String str7 = "hello"; final String str8 = "java"; String str9 = str7 + str8;//常量与常量拼接 System.out.println("str3 == str9 " + (str3 == str9));//true String str10 = (str1 + str2).intern();//intern()的结果放常量池 System.out.println(str3 == str10);//true }
常用的方法
1、基本方法
(1)int length()
返回字符串的长度,即字符的个数
(2)字符串的比较
boolean equals(String other)
this和other进行内容比较
对Object的equals进行重写
严格区分大小写
boolean equalsIgnoreCase(String anotherString)
this和anotherString进行内容比较
不区分大小写
自然排序
public int compareTo(String anotherString) 如果是ASCII范围内,按照ASCII值的顺序
定制排序
//java.text.Collato String str3 = "中国";//Z String str4 = "美国";//M //如果想要按照字典顺序 //找定制排序,实现了java.util.Comparator接口,重写int compare(String s1,String s2) //java.text.Collator Collator c = Collator.getInstance(); int result = c.compare(str3, str4); System.out.println(result);//中 > 美
(3)去掉前后空格
String trim()
(4)转大小写
String toUpperCase()
public String toLowerCase()
(5)是否是空字符串
方式一:"".equals(字符串)
方式二:.isEmpty()
2、和字节相关
编码:把字符串转成字节数组
byte[] getBytes() 平台默认编码方式进行编码
byte[] getBytes(字符编码方式) 按照指定的编码方式
解码:把字节数组转成字符串
new String(byte[])
new String(byte[],int offset, int length)
new String(byte[], 字符解码方式)
乱码
(1)编码方式与解码方式不一致
(2)缺字节
3、和字符相关
把字符串转字符数组
char[] toCharArray()
把字符数组转字符串
new String(char[])
new String(char[],int offset, int count )
取指定位置的字符
char charAt(index)
4、是否以xx开头和结尾
boolean startsWith(xx)
boolean endsWith(xx)
5、字符串截取
String subString(int start) 从[start,最后]
String subString(int start, int end) 从[start,end]
6、拆分
String[] split(支持正则)
7、查找
是否包含
boolean contains(子串)
查找索引位置
int indexOf(xxx) 如果存在返回索引如果不存在返回-1
int lastIndexOf(xx)
8、替换
String replace(目标子串, 新子串)
String replaceAll(目标子串, 新子串) 支持正则
String replaceFirst(目标子串, 新子串)
java.lang.StringBuffer和java.lang.StringBuilder
StringBuffer是JDK1.0就有,是线程安全的
StringBuilder是JDK1.5引入,是线程不安全
和String的区别
(1)String对象是常量对象,是不能修改的,StringBuffer和StringBuilder是字符串缓冲区,可变字符序列,可以修改的
String一旦涉及修改就产生新的String对象
StringBuilder和StringBuffer不会产生新的StringBuilder和StringBufffer对象
(2)赋值的方式
只有String支持,String str = "xxx";
(3)拼接
String支持+ 每一次拼接产生新对象,浪费空间和时间
append 不会产生新对象
常用的方法
(1)拼接
append(xx)
支持连写 sBuilder.append(xx).append(yyy).append(zzz)...
(2)插入
insert(index,xx)
(3)删除
delete(start, end)
(4)替换
setCharAt(index, char)
(5)反转
reverse()
标签:String,int,Object,对象,API,JavaSE,public,常量 From: https://www.cnblogs.com/woniupa/p/17169783.html