JAVA三大类
String
1.String类的实例化方式
直接赋值方式:String str=”hellofor”;
传统构造方法:String str=new String(“hellofor”);
采用直接赋值的实例化方式,则该实例化对象(字符串内容)会自动保存到到JVM底层的一个对象池中(字符串对象池),如果下次继续使用直接赋值的模式声明String类对象,此时对象池中若有指定内容,将直接进行引用;若没有,则开辟新的字符串对象而后将其保存在对象池中以供下次使用。
采用传统构造方法的实例化方式,就会开辟两块堆内存空间,并且其中一块堆内存会成为垃圾空间。但是可以用入池操作:public String intern();
2.字符串相等比较
在String类对象上比较两个字符串是否相等,“”本身是进行数值比较的,对于String类对象,则“”比较的是两个对象所保存的内存地址比较,而并没有比较两个字符串的内容,要想比较内容则要用String类提供的equals方法。
例子:String str1=”hello”;
String str2=new String(“hello”);
System.out.println(str1.equals(str2));
3.String类的匿名对象
使用“”来定义的内容本质上就是String类提供的匿名对象,在开发中,如果要判断用户输入的字符串是否等于特定的字符串,一定要将特定的字符串写在前面。否则会出现NullPointerException问题。
例子:String str=null;
System.out.println(str.equals(“hello”));就没有考虑用户输入的问题,所以会出现NullPointerException问题。
4.字符串不可变更
在定义字符串常量时,他的内容不可改变。
例子:String str=”hello”;
str=str+”for”;
str+=”!!!”;
System.out.println(str);此时输出为hellofor!!!
内存图分析如下:
5.字符与字符串的相互转换
String str=”helloworld”;
System.out.println(str.charAt(0));//此步骤是取得指定索引位置为0的字符。如果索引位置超过了字符串长度,则会产生StringIndexOutOfBoundsException异常
char[] data=str.toCharArray();//此步骤是将字符串变为字符数组
for(int i=0;i<data.length;++i){
data[i]-=32;
}
System.out.println(new String(data));//此步骤是将字符数组里面的所有内容变为字符串
System.out.println(new String(data,5,5));//此步骤是将部分支付数组中的内容变为字符串,第一个“5”为下表开始位置,第二个“5”为转换的数量。
6.字节与字符串的相互转换
7.字符串的比较
String str1=”hello”;
String str2=”Hello”;
System.out.println(str1.equals(str2));//false,区分大小写的比较
System.out.println(str1.equalsIgnoreCase(str2));//true,//不区分大小写的比较
System.out.println(‘A’.compareTo(“a”));//-32
System.out.println(‘a’.compareTo(“A”));//32
System.out.println(‘AB’.compareTo(“AC”));//-1
System.out.println(‘A’.compareTo(“A”));//0
compareTo是一个可以区分大小关系的方法。
该方法会返回一个整形,该数据会根据大小关系返回三类内容
相等:返回0
小于:返回内容小于0
大于:返回内容大于0
8.字符串查找
字符串查找,最好用contains()
例子:String str=”hellofor”;
System.out.println(str.contains(“for”));//true
利用 indexOf()方法进行位置查找
例子:String str=”hellofor”;
System.out.println(str.indexOf(“for”));//5
System.out.println(str.indexOf(“bit”));//-1没有查到
使用indexOf需要注意,如果内容重复,他只能返回查找的第一个位置
例子:String str=”helloworld”;
System.ou.println(str.indexOf(“l”));//2
System.ou.println(str.indexOf(“l”,5));//8,从下标为5开始查找“l”,查到后返回下标
System.ou.println(str.lastIndexOf(“l”));//8,从后向前查找“l”,查到后返回下标。
判断开头或结尾
例子:String str=”##@@helloworld!!”;
System.out.println(“str.startsWith(“##”));//true
System.out.println(“str.startsWith(“@@”,2));//true
System.out.println(“str.endsWith(“!!”));//true
9.字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据
例子:String str=”helloworld”;
System.out.pintln(str.replaceAll(“l”,””));//he__owor_d,将字符串里面的所有的”l”替换为””
System.out.println(str.replaceFirst(“l”,””));//he_loworld,将字符串里面第一个出现的”l”替换为””
10.字符串拆分
将一个完整的字符串按照指定的分隔符划分为若干个子字符串
例子:将字符串全部拆分
String str=”hello world hello for”
String[] result=str.split(“ ”);按照空格拆分
for(String s:result){
System.out.println(“s”);
}
例子:将字符串部分拆分,该数组长度就是2
String str=”hello world hello for”
String[] result=str.split(“ ”,2);
for(String s:result){
System.out.println(“s”);}
11.字符串截取
从一个完整的字符串中截取胡部分内容。
例子:String str=”helloworld”;
System.out.println(str.substring(5));从制动索引下标5截取到结尾
System.out.println(str.substring(0,5));从指定下标开始0截取到下标5,左闭右开。
12.其他操作
public String trim():去掉字符串中的左右空格,保留中间空格
public String toUpperCase():字符串转大写
public String toLowerCase():字符串转小写
public boolea isEmpty():判断是否为空字符串,但不是null,而是长度为0.
13.StringBuffer类
String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。所以频繁修改字符串的情况下考虑使用StringBuffer。
相互转换:
String–>StringBuffer:利用StringBuffer的构造方法或append()方法
StringBuffer–>String:调用toString方法
StringBuffer的一些其他方法:
字符串反转:StringBuffer sb=new StringBuffer(“helloworld”);
System.out.println(sb.reverse());
删除指定范围的数据:StringBuffer sb=new StringBuffer();
System.out.println(sb.delete(5,10));
插入操作:StringBuffer sb=new StringBuffer();
System.out.println(sb.delete(5,10).insert(0,”for”));
String和StringBuffer和StringBuilder的区别:
A.string是常量内容不可修改,而stringbuilder与stringbuffer的内容可以修改
B.StringBuffer是采用同步处理,线程安全,性能较低。
C.StringBuilder是采用异步处理,线程不安全,性能较高。
D.所以在普遍场景下,推荐使用stringbuilder,当string对象使用+进行字符串拼接时,javac编译器会将string对象变为stringbuilder而后调用append()来修改字符串内容,减少无用空间的开辟。
二、Object类
所有类的对象都可以用object进行接收,是所有类的父类,所有类默认继承object类。
toString():获取对象信息。
默认的Object类提供toString()方法只能够得到一个对象的地址。如果觉得默认的toString()方法功能不足,就需要在子类上覆写toString()方法。
Equals(),比较两个对象内容,object类提供的equals默认比较两个对象的地址是否相同。
Object类可以用来接收所有的数据类型,包括:类,数组,接口。
三、包装类
包装类就是将基本数据类型封装到类中。
装箱:将基本数据类型变为包装类数据类型,利用每一个包装类提供的构造方法实现装箱处理。
拆箱:将包装类中的包装的基本数据类型去取出,利用Number类中提供的六种方法。
定义一个包装类:
Class IntDemo{
private int num;
public IntDemo(int num){
this.num=num;
}
public int intValue(){
return this.num;
}
}
IntDemo实际上就是int数据类型的包装类,利用IntValue就可以实现基本数据类型变为对象的需求。
在jdk1.5之后,提供了自动装箱与拆箱的机制
//自动装箱
Integer x=55;
//可以直接利用包装类对象操作
System.out.println(++x*5)
将字符串变为int型:
string str=”123”;
int num=Integer.parseInt(str);
System.out.println(num);
关于基本数据类型与包装类数据类型使用规则如下:
强制所有的pojo类属性必须使用包装类数据类型,推荐所有的局部变量使用基本数据类型。