一.String类
1.1String类的两种实例化方式:
直接赋值:
String str = "Java";//str是一个对象,所以“Java”就应该保存在堆内存中
System.out.println(str);
String 也有构造方法:
public String (String str);
传统赋值:
String str = new String("Java");
System.out.println(str);
1.2字符串相等比较:
== 与 equals
== 比较的是对象内存地址的数值
equals 比较的是字符串内容的比较
例如:
Integer a = 55;
Integer b = 55;
System.out.println(a == b);//true
System.out.println(a = new Integer(55));//false
System.out.println(a.equals(b));//true
System.out.println(a.equals(new Integer(55)));//true
1.3String两种实例化的区别
1.3.1
String str1 = "Java";
String str2 = "Java";
String str3 = "Java";
System.out.println(str1 == str2);//true
System.out.println(str2 == str3);//true
System.out.println(str3 == str1);//true
str1,str2,str3,只开辟了一块内存空间,共用一个地址。
1.3.2
String str = new String("Java");
Java占了一个内存空间,new出来一个新的内存空间,造成了内存浪费。而且也可能会造成对字符串共享的问题。
在String类中提供有方法入池操作:public String intern();
String str1 = new String("Java").intern();
String str2 = "Java";
System.out.println(str1 == str2);//true
String类中两种对象实例化的区别:
1.直接赋值:只会产生一块对内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用(推荐使用)
2.构造方法:会开辟两块对内存空间,有一块为垃圾空间,不会自动保存在对象池中,可以使用intern()方法来手工入池。
1.4字符串常量不可变更
字符串一旦定义不可变更
例:
String str = "Java";
str = str + "Easy";
str += "???";
System.out.println(str);//Java Easy ???
以上字符串的变更是字符串对象的变更而不是字符串常量的变更。
1.6字符与字符串
String< -- >char
1. 字符数组char[ ]->String
public String(char[ ] value1);
public String(char[ ] value1,int offset,int count);
2. 将字符串按照索引转为单个字符String->char
public char charAt(int index);取得指定索引的字符返回
3. 将字符串转为字符数组String->char[ ]
public char[ ] toCharArray( );
1.7字节与字符串
byte[ ] -> String
//String类构造方法
public String(byte[ ] bytes)
String -> byte[ ]
**********public byte[ ] get Bytes( )**********
public byte[ ] get Bytes(String charset):按照指定编码转为字节数组
1.8字符串比较
1.8.1不区分大小写的相等比较
public boolean equalsIgnoreCase(String anotherString);
1.8.2比较两个字符串的关系
public int compareTo(String anotherString)
//>0:表示本字符串大于目标字符串
//=0:表示两者相等
//<0:表示本字符串小于目标字符串
1.9字符串查找
从一个完整的字符串之中判断指定内容是否存在
1.9.1判断指定字符串是否存在
public boolean contains(String prefix);
1.9.2判断是否以指定字符串开头
public boolean startsWith(String prefix);
public boolean startsWith(String prefix,int offset);
1.9.3判断是否以指定字符串结尾
public boolean endsWith(String suffix);
1.10字符串的替换*******************
public String replaceAll(String regex,String replacement);
//将目标字符串全部替换为str.replaceAll("1","_"):将str中的所有1换成_
1.11字符串拆分*******************
public String[ ] split(String regex);将字符串全部拆分
public String[ ] split(String regex,int limit);
特殊字符需要转译后拆分 eg:\\.
1.12字符串截取*******************
public String substring(int brginIndex):从指定索引截取到结尾
public String substring(int beginIndex,int endIndex):从指定索引截取部分内容
1.13字符串的其他操作方法
1. 去除字符串的左右空格,保留中间空格:
public String trim( );
2. 字符串大小写转换(全部大小写):
public String toUpperCase( );
public String toLowerCase( );
3. 判断字符串是否为空字符串("",不判断null):
public boolean isEmpty( );
1.14两只SB(StringBuffer、StringBuilder)*******************
1. 字符串拼接反发:
public synchronized StringBuffer append(各种数据类型)
2. StringBuffer与String的相互转换:
String->StringBuffer:
I. append( );
II. 调用StringBuffer构造方法 new StringBuffer("");
StringBuffer->String
调用StringBuffer.toString( );
3. StringBuffer常用操作方法
3.1字符串反转
reverse( ):StringBuffer
3.2删除指定范围的数据
delete(int start,int end):StringBuffer
insert(int offset,各种数据类型):StringBuffer
解释String、StringBuffer与StringBuilder的区别
1.String内容不可变,两个SB内容可以修改。
2.StringBuffer(JDK1.0),采用同步处理,线程安全,效率较低
3.StringBuilder(JDK1.5),采用异步处理,线程不安全,效率较高,当在String对象进行“+”,编译时会将String类变为StringBuilder进行append( )处理。
二.Object类(RealFather)
使用Object类接收所有类的对象
例:
class Person{
}
class Student{
}
public class Test{
public static void main(String[ ] args){
fun(new Person());
fun(new Student());
}
public static void fun(Object obj){
System.out.println(obj);
}
}
1.toString( )---取得对象的信息
系统输出默认调用toString( )方法。
Object类toString( )只是简单输出当前所引用的类名称以及对象地址。
如果想在类中取得本类属性信息,需要覆写toString( );
2.equals( )---对象比较
3.接受引用数据类型
Object可以接收所有引用数据类型:数组、类、接口。
三.包装类
1.包装类的分类
a.数值型包装类(Number的直接子类):
Byte、Double、Short、Long、Float、Integer。
会发生类型转换异常。NumberFormatException
b.对象型包装类(Object的直接子类):
Boolean、Character(char)
2.装箱与拆箱
装箱:将基本数据类型变为包装类对象。利用每个包装类提供的构造方法实现。
拆箱:将包装类中包装的基本类型数据类型去除。利用xxValue();
对于Interge var = ? 在[-128,127]的赋值,Intrger对象在常量池产生,会复用已有对象;这个区间外的所有数据,都在堆上产生,不会服用以后对象。
Integer i1 = 10;
Integer i2 = 10;
i1 == i2;//true
Integer i3 = 200;
Integer i4 = 200;
i3 == i4;//false
阿里编码规范:int or Integer?
I.[强制]所有POJO类(简单Java类)属性必须使用包装类。
II.[强制]RPC方法返回值和参数必须使用包装类。
III.[推荐]所有的局部变量使用基本类型。
【简单Java类】【类中只有成员变量、构造方法、getter/setter】
3.类与字符串的转换。
3.1String -->基本数据类型
String --> int:Integer.parseInt(str);
3.2基本数据类型-->String
a.""+基本数据类型
b.String类提供的静态方法valueOf(基本类型)---推荐,不产生垃圾空间