1.String类
1.String有两种实例化方式:
(1).直接赋值:
String str = "Hello,world";
"Hello,world"应该保存在堆内存中
(2).构造方法实例化对象:
String str = new String("Hello,world";
2.字符串相等比较:
“==”比较其地址;(“==”本身是进行数值比较的,如果用于对象比较,则比较的就是两个对象保存的内存地址数值,而没有比较内容;
equals() 比较其内容;
小技巧:在开发中,若要判断用户输入的字符串是否等同于特定字符串,一定要将特定字符串写在前面;
采用构造方法创建String实例化对象时,没new一次,就会在堆上开辟两块空间(有一块为垃圾空间);
采用字符方法产生的字符对象不会自动入池;
String提供手动入池操作intern();
3.字符串常量不可变更,可变更的是引用!
4.字符与数组的相互转化:
将字符数组中的所有内容变为字符串 public String(char value[])
将部分字符数组中的内容变为字符串 public String (char value[],int offset,int count)
取得指定索引位置的字符,从0开始 public char charAt(int index)
将字符串变为字符数组返回 public char[] toCharArray()
5字节与字符串相互转换;
6.字符串比较:
equals() 区分大小写比较
equalsIgnoreCase() 不区分大小写比较
compareTo() 比较两个字符串大小关系(相等返回0,大于返回内容大于0,小于返回内容小于0)
7.字符串查找:
contains 判断一个子字符串是否存在;(最好最方便的方法)
indexOf 从头开始查找指定字符串的位置,查到了返回位置的开始索引,查不到返回-1;
lasIindexOf 从后向前查找;
startsWith 判断是否以指定字符串开头;
endsWith 判断是否以指定字符串结尾;
8.字符串替换:
replaceAll 替换所有的指定内容
replaceFirst 替换首个内容
9.字符串拆分:
两种拆分方式;
//字符串拆分;
public class Test{
public static void main(String[] args){
String str = "hello world hello java hello";
String[] result = str.split(" ");//将字符串全部拆分
for(String s: result){
System.out.println(s);
}
String[] Str = str.split(" ",3);//将字符串部分拆分,数组长度指定
for(String s: Str){
System.out.println(s);
}
}
}
若发现有些内容无法拆分开就需要用“\\"转义,例如拆分IP地址;
10.字符串截取:
substring
String str = "hello,world,hehehe!";
System.out.println(str.substring(2));//字符串截取
System.out.println(str.substring(2,8));
11.字符串其他操作方法:
toUpperCase() 字符串转大写
toLowerCase() 字符串转小写
length() 取得字符串长度
isEmpty 判断是否为空字符串,但不是null,是长度为0;(true/false)
StringBuffer 类
在String中使用“+”来进行字符串连接,但在StringBuffer中需要更改为append()方法;
StringBuffer sb = new StringBuffer();
sb.append("Hello").append("World");//字符串连接
System.out.println(sb);
StringBuffer中一些特有的方法:
字符串反转;
reverse();
StringBuffer sb = new StringBuffer();
sb.append("Hello").append("World");//字符串连接
System.out.println(sb);
System.out.println(sb.reverse());//字符串反转。
删除指定范围的数据;
delete(int start,int end);
System.out.println(sb.delete(2,5));//删除指定范围内的数据
插入数据;
insert(int offset,各种类型的数据);
System.out.println(sb.insert(0,"你好"));//插入各种类型的数据
面试题:请解释String、StringBuffer、StringBuilder的区别;
1.String的内容不可修改;
2.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作;
3.String类的修改操作“+”,JVM底层会将String变为StringBuffer处理,减少垃圾空间的产生;
2.Object类
Object是java默认提供的一个类,Object是所有类的默认父类;
Object可以接受所有类的对象(向上转型)
Object定义的一些方法:
toString(); 取得对象信息
equals(); 对象比较
例如,使用Object来接受数组对象
public static void main(String[] args){
//Object接受数组类型,向上转型
Object obj = new int[]{1,2,3,4,5,6,7,8};
//向下转型,需要强转
int[] data = (int[])obj;
Object真正达到了参数的统一。
3.包装类
包装类就是将基本数据类型装到类中;
对象型包装类(Object类的直接子类)
Boolean(bool的包装类)、Character(char的包装类)
数值型包装类(Number类的直接子类)
Integer(int)、Short(short)、Long(long)、Byte(byte)
Float(float)
3.1装箱与拆箱
装箱:将基本数据类型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理;
拆箱:将包装类中包装的基本数据类型取出;
例:
Integer num = new Integer(55);//装箱
int data = num.intValue();//拆箱
System.out.println(data);
在JDK1.5后,提供了自动拆装箱机制;
Integer x = 55;
所有的相同类型的包装对象之间值的比较,全部使用equals方法;
对于Integer ==?(自动装箱)-128~127之间赋值,Integer对象会在Integer常量池产生,会复用已有对象,这个区间的Integer值可以直接使用
“==”判断。这个区间以外的所有值,都在堆上产生,不回复用对象,使用equals比较;
3.2字符串与基本数据类型转换;
parse类型
例如:
String str = "123";
int num = Integer.parseInt(str);//将字符串变为int型
double op = Double.parseDouble(str);//变为double型
boolean nmm = Boolean.parseBoolean(str);//变为boolean型
System.out.println(nmm);