一、java.lang.String 类
1、String 类的两种实例化方式
1)直接赋值(在堆上分配空间)
String str1 = “hello world”;
2)传统方法——通过构造方法实例化String对象
String str2 = new String(“hello world”);
2、字符串相等比较(“equals” 和 “==”)
(1)“==” 进行字符串比较:
String str1 = “hello”;
String str2 = new String(“hello”);
System.out.println(str1 == str2); // false
(2) “equals” 进行字符串比较:
String str1 = “hello”;
String str2 = new String(“hello”);
System.out.println(str1.equals( str2)); //true
(3)“equals”与“==”的区别:
a、“==” 进行数值的比较,比较字符串时,比较的是字符串所在的地址数值。
b、“equals” 进行字符串内容的比较。
3、字符串常量是 String 的匿名对象
判断用户输入字符串是否等于特定字符串,一定要将特定字符串放在前面,避免 NullPointerException
推荐使用: System,out.println("hello".equals(str));
4、字符串常量不可变更
字符串一旦定义之后,就不能被更改。编程语言对字符串的实现都是字符数组,而数组一旦定义出来,长度是固定的。所以字符串常量不可变更。
String str = "hello";
Str = str + " world";
Str += "!!!";
System.out.println(str);//hello world!!!
5、字符与字符串
字符串就是一个字符数组,所以在String类里面支持有字符数组转换为字符串以及字符串变为字符的操作方法:
a.将字符数组->String
public String(char[] value) ;//将字符数组的所有内容变为字符串
public String (char[] value, int offset, int count) ;//将部分字符数组中的内容变为字符串
b.将字符串转为单个字符
public char charAt(int index);//取得制定索引位置的字符,索引从0开始
c.将字符串变为字符数组( String->char[])
public char[] toCharArray();
PS:取得字符串长度 public int length();
6、字节与字符串
(1)将字节数组变为字符串
public String(byte byte[]) ;
(2)将部分字节数组中的内容变为字符串
public String(byte byte[],int offset,int length) ;
(3)将字符串以字节数组的形式返回
public byte[] getBytes() ;
(4)编码转换处理
public byte[] getBytes(String charsetName)throws ;
7、字符串比较
public boolean equalsIgnoreCase(String anotherString) ;//不区分大小写进行比较
public int compareTo(String anotherString) ;//比较两个字符串大小关系
compareTo() 方法在比较两个字符串时,基于字符串中各个字符的Unicode值进行比较。
如果字符串相等返回0;小于返回内容小于0的数;大于返回内容大于0的数。
8、字符串查找
public boolean contains(String str) ;//判断str在本字符串中是否存在
public boolean startsWith(String str) ;//判断是否以指定字符串开头。
public boolean startsWith(String str,int index) ;//从指定位置开始判断字符串是否以指定字符开始。
public boolean endsWith(String str) ;//判断是否以指定字符串结尾。
9、 字符串替换
(1)替换所有指定内容
public String replaceAll(String regex, String replacement) ;
(2)替换首个内容
public String replaceFirst(String regex, String replacement) ;
10、字符串拆分
(1)将字符串按照指定格式全部拆分
public String []split(String regex) ;
(2)将字符串部分拆分,数组长度为limit
public String []split(String regex, int limit);
11、字符串截取
public String substring(int beginIndex) ;//从指定位置截取到字符串结尾
public String substring(int beginIndex,int endIndex) ;//截取部分内容
12、String的其他方法
(1)去掉左右空格
public String trim() ;
(2)转大小写
public String toUpperCase() ;
public String toLowerCase() ;
(3)判断字符串是否为空 只能判断是否为空字符串,而不是NULL;
public boolean isEmpty() ;
13、字符串的对象池
JVM 底层会自动维护一个字符串的对象池,如果现在采用直接赋值的形式进行 String 的对象实例化,该对象会自动保存在这个对象池中。如果下次继续使用直接直接赋值的模式声明 String 对象,此时对象池中若有指定内容,则直接引用;如果没有,则开辟新的堆空间后将其保存在对象池供下次使用。
手工入池(本地方法)public native String intern();
二、Object 类
Object 是 Java 默认提供的类。
1、Java 除了 Object 类,所有的类都存在继承关系,所有类默认继承 Object 父类,所有类对象都可以使用 Object 类进行接收。
2、取得对象信息 toString() 方法
直接使用对象输出,默认输出一个地址编码,如果现在输出的是String对象,此时输出字符串内容而非地址,原因就在于String类覆写了 Object 的 toString() 方法。
System.out.println() ;//系统输出默认会调用对象的 toString()
如果默认给出的 toString() 功能不足(不想输出地址而是输出本类信息),需要在子类中覆写 toString()方法。
3、对象比较——equals() ;
实际上 String 类的 equals() 方法是对 Object 类中 equals() 方法的覆写。
4、接收引用数据类型
Object类可以接收所有引用类型。包括:类,数组,接口。
三、包装类
上面说到,Object类可以接收所有的引用数据类型,可是Java中数据类型分为基本数据类型和引用数据类型。包装类就是将基本数据类型封装到类中(可以说,包装类是为了基本数据类型存在的)
1、分类
(1)对象性包装类(Object的直接子类):Boolean(boolean)、Character(char)
(2)数值型包装类(Number的直接子类),存在数值转换异常:Byte(byte)、Short(short)、Long(long)、Double(double)、Float(float)、Integer(int)
2、装箱与拆箱——基本数据类型与相应包装类的数据处理
装箱:将基本数据类型变为包装类对象,利用每个包装类提供的构造方法装箱
拆箱:将包装类中包装的基本类型值取出,利用Number类提供的xxValue()实现拆箱拆箱处理。
public static void main(String[] args){
Integer num = new Integer(20); //将 20 用 Integer 类进行装箱
int data = num.intValue(); //用 intValue() 方法进行拆箱
System.out.println(data);
}
- 阿里编码规范:所有相同类型的包装类对象之间的值比较,全部使用equals方法比较。
- 说明:对于Integer var =? 在-128~127之间的赋值,Integer对象在Integer常量池产生,会复用已有对象,这个区间内的Integer值可以直接使用==判断。除此之外的所有数据,都会在堆上产生,并不会复用已有对象。
使用 int 还是 Integer ?
(1)[强制]所有POJO类(简单java类,Bean)属性必须使用包装类型
(2)强制]RPC方法的返回值和参数必须使用包装类型
(3)[推荐]所有局部变量使用基本类型
3、字符串与基本类型的转换
(1)将字符串转为基本类型
调用各个包装类.parseXX(String str)
Integer.parseInt(String str);
//String类->int类(Integer)
public static int parseInt(String s)throws NumberFormatException
//String类->double类
public static double parseDouble(String s)throws NumberFormatException
//String类->Boolean类
public static parseBoolean(String s)
(2)基本类型变为字符串
a、" " + 基本类型
b、使用 String 类的 valueof(基本类型,静态方法),此方法不产生垃圾空间(推荐).