概念部分
1 String类
两种实例化方式:(区别)
直接赋值法:只开辟一块堆内存,且该字符串对象可以自动保存在常量池中以供下次使用。
传统方法:开辟两块堆内存,一块成垃圾空间,不会自动保存在常量池,可intern ( ) 手工入池。
字符串比较:
“== ”比的是对象所保存的内存地址数值
内容比较用str1. equals ( "str2" )
注意:开发中将特定字符串写在前面,用户输入的写在括号里,否则可能产生空指针异常
String类设计使用了共享设计:(减小开销)
在JVM底层自动维护一个常量池,直接赋值的String被保存其中,
若下次继续使用直接赋值法,则去常量池中找,
若有指定内容直接引用;若没有则开辟新的字符串对象保存在常量池中。
采用构造方法(传统):
String str = new String ( "hello" ) ;
若使用如上构造方法就会开辟两块堆内存空间,new 一块,hello自己一块,
后者将成为垃圾空间,使字符串共享也产生问题。
手动入池操作:
String str = new String ( "hello" ) . intern ( ) ;
intern ( ) 方法将new 的空间入池。
字符串:
所有语言对于字符串的底层实现都是字符数组。
字符串常量不可变,但字符串对象引用可以一直变,这样会产生大量垃圾空间。
字符串常用方法:
str. charAt ( int index) ; 取得指定索引位置字符,从0 开始。
str. toCharArray ( ) ; 将字符串变为字符数组返回。
str. getBytes ( ) ; 将字符串以字节数组形式返回。
str. equals ( ) ; 区分大小写比较
str. equalsIgnoreCase ( ) ; 不区分大小写比较
str. compareTo ( ) ; 比较两个字符串大小,= 0 ;< - 1 ;> 1 。常用来区分大小写。
str. contains ( ) ; 判断子串是否存在
str. indexOf ( ) ; 指定位置查找子串或查到子串返回其
str. startsWith ( ) ; 判断是否以指定字符串开头
str. endswith ( ) ; 判断是否以指定字符串结尾
str. replaceAll ( ) ; 替换所有内容
str. replaceFirst ( ) ; 替换首个内容
str. spilit ( ) ; 字符串拆分,注意拆分符的转义
str. substring ( ) ; 字符串截取
str. trim ( ) ; 字符串去掉左右空格
str. toUpperCase ( ) ; 全部转大写
str. toLowerCase ( ) ; 全部转小写
str. isEmpth ( ) ; 字符串判空
StringBuffer类:
和String类都是“CharSequence”接口的子类,此接口描述一系列字符集。
互相转换:
String- > SB:利用StringBuffer的构造方法或append ( )
SB- > String:调用toString ( ) 方法
方法:
sb. reverse ( ) ; 字符串反转
sb. delete ( ) ; 字符串删除
sb. insert ( ) ; 字符串插入
* 面试题:String与StringBuffer、StringBuilder区别
1. String内容不可改,两只SB可改;
2. SBuffer采用同步处理,线程安全;SBuilder采用异步处理,不安全。
2 Object类
Java中其他所有类默认继承Object类;所有类对象可用Object接收。
若使用对象直接输出时,默认是一个地址编码,比如数组;
若现在使用String类,该类对象直接输出就调用toString ( ) 方法。
Object类的toString ( ) 核心在于取得对象信息。
Object达到参数统一,一个类希望接收所有的数据类型可以实现。
3 包装类
就是将基本数据类型封装到类中。
使用:
对象型( Object的直接子类) :Boolean、Character ( cahr)
数值型( Number的直接子类) :Byte Double Short Long Integer Float
说明:
Number类的定义:public abstract class Number implements java. io. Serializable
在Number类中实际定义有六种重要方法
装箱与拆箱:
包装类与基本数据类型之间:
装箱:将基本型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理。
拆箱:将包装类中包装的基本数据类型取出,利用Number类中提供的六种方法。
JDK1. 5 之后提供自动拆装箱处理,则可直接利用包装类对象操作。
阿里规范:相同类型的包装类对象之间值比较全部用equals方法。
类型互换:
字符串- > 基本数据类型:
int num = Integer. parseInt ( str) ;
基本数据类型- > 字符串:
1. 任何类型使用“+ ”连接空白字符
2. 使用String类的valueOf ( ) , 此方法不产生垃圾
实现对象比较:
class Person {
private String name ;
private int age ;
public Person ( String name, int age) {
this . age = age ;
this . name = name ;
}
@Override
public String toString ( ) {
return "姓名:" + this . name+ ",年龄:" + this . age ;
}
@Override
public boolean equals ( Object obj) {
if ( obj == null) {
return false ;
}
if ( this == obj) {
return true ;
}
if ( ! ( obj instanceof Person ) ) {
return false ;
}
Person person = ( Person) obj ;
return this . name. equals ( person. name) && this . age== person. age ;
}
}
class Student { }
public class Test {
public static void main ( String[ ] args) {
Person per1 = new Person ( "Hannah" , 20 ) ;
Person per2 = new Person ( "Sarah" , 18 ) ;
System. out. println ( per1. equals ( per2) ) ;
}
}