StringBuiler
由于字符串不支持频繁修改 ,设计了字符串工具类,内部维护一个可变的char数组,内存开销少,运行效率高,提供了基础的修改字符串操作,提供了增删改查。
1.追加字符串
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.append(" World"));`
2.将StringBuiler转化为String
String s= sb.toString();
3.修改操作
sb.replace(0,5,"Hi");
也可以替换比原先长的字符串
4.删除操作
sb.delete(0,2);
5.插入操作
sb.insert(0,"Hi");
6.翻转字符串
sb.reverse()
StringBuffer和StringBuilder的区别主要是StringBuffer是线程安全的,可并发处理,性能稍慢,而StringBuilder是非线程安全的 ,不可并发处理,性能稍快。
正则表达式
[abc] 可以是其中任意一个字符
[^abc] 除了a、b、c的任意字符
[a-z]a、b、c到z的任意一个字符
[a-zA-Z0-9]表示a-z,A-Z,0-9的任意一个字符
&&表示与的关系
数量词
X?表示0个或者一个X
X*表示0个或者任意个X
X+表示大于一个X
X{n}表示 n个X
X{n,}表示n个到任意个X
X{n,m}表示n个到m个X
分组
()内可以加|表示或者的意思
split()
字符串的split()方法,默认是拆分字符串,如果字符串开始为可拆分内容,会首先拆出一个空字符串,如果遇到了两个可拆分内容时候,他们中间会拆出一个空字符串,但是如果默认连续出现可拆分内容,那么之间拆分出的所有空字符串就会被忽略。
重载的split()方法
split(“拆分内容”,limit(拆分项的数量))
当拆分项不足的时候则保留 最多可拆分项(包括原本 最后舍弃的空串)
当limit为负数时候应该应拆尽拆,能拆分出多少就保留多少(包括最后本应该舍弃的空字符串)
String str="=1==2=3=4=5=6=======";
给定的字符串如果为上述字符串,则切出的结果应该是[,1,2,3,4,5,6]
但如果后面是下面的字符串
String str="=1==2=3=4=5=6=======7";
则结果应该是[,1,2,3,4,5,6,7]
relpaceall()
str.relaceAll("正则表达式","要替换的内容")
matches(r1)
判断字符串是否符合正则标准
Object
什么是Object?
在java的类继承结构中,java.lang.object类位于最顶端,如果定义一个类时,没有使用extends声明其超类,则默认是Object,Obeject类的引用变量可以指向所有类型。
1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2.getClass方法
final方法,获得运行时类型。
3.toString方法
该方法用得比较多,一般子类都有覆盖。
4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
5.equals方法
equals方法
比较对象的虚地址,但是可以在类中被重写。
如:String类重写了,两个相同值的String对象相比较为 true;
String str=new String(“123”);
String str1=new String(“123”);
System.out.println(str.equals(str1));à打印为true.
“==”
比较的是内存中的虚地址
String str=new String(“123”);
String str1=new String(“123”);
System.out.println(str==str1);à打印为false。
6.hashCode方法
获取对象的哈希码值,为16进制
equals方法与hashCode方法关系
如果两个对象使用equals比较返回true,那么它们的hashCode值一定要相同。
如果两个对象equals比较返回false,那么它们的hashCode值不一定不同,覆盖equals,往往需要覆盖hashCode,可以使用Eclipse自动生成,保证equals返回true,则hashCode相同;equals返回false,则hashCode不同。在Set集合部分有实际应用。
7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8.notify方法
该方法唤醒在该对象上等待的某个线程。
9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
要注意的是equals()和==的区别,==用于比较变量的值,可以应用于任何类型,如果应用的是基本类型则实际比较的是值得大小,如果应用的是引用类型则比较的是地址值是否相同。判断两个对象是否为同一个对象。(指向同一个对象)。equals默认比较的也是地址值,如果重写之后可以比较内容是否相同。
包装类以及自动拆箱
包装类概述,在进行类型转换的范畴之中他有一种特殊的转换,将int这种基本数据类型转化为引用类型。所有基本类型都能转化为一种包装类型。
基本类型 | 包装类型 |
---|---|
short | Short |
int | Integer |
byte | Byte |
long | Long |
char | Charactor |
float | Float |
double | Double |
booelan | Boolean |
上述包装类型的超类都是java.long.Number类。Integer提供了一些常量比如最大的int值可以通过Integer.MAX_VALUE.以及Integer的静态方法Integer.parseInt用于将字符串转化为Int。
在jdk5时候引入了自动拆箱和自动装箱包装,如下述代码都是正确的
Integer a=100;
Integer b=200
Integer c=a+b;
Double d=c