- 包装类
- 包装类和基本数据的转换
- 包装类和String 类型的基本转换
- Integer类和Character类的常用方法
- 经典面试题
- String类
- String对象的创建方法和String的内存布局
- intern()函数
- 字符串特性及练习题
- String a="abc"+"hello"常量相加和String a=b+c变量相加(四部怎么走?)的区别
- 结合传参机制,考虑创建String的内存布局
- String常用方法
- StringBuffer
- StringBuffer的构造方法
- String与StringBuffer的相互转换
- String—>StringBuffer
- StringBuffer->String
- StringBuffer类常用方法
- 练习题
从Byte开始到Double所以黑字的父类都是Number
演示包装类和基本数据类型的相互转换,这里以int和 Integer演示。
- jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱
- jdk5以后(含jdk5)的自动装箱和拆箱方式
3)自动装箱底层调用的是valueOf方法,比如Integer.valueOf(0
以Integer和int 的相互转换举例
public class Test {
public static void main(String[] args) {
//JDK5.0以前采用手动装箱拆箱
int n1=100;
//手动装箱
Integer integer=new Integer(n1);
Integer integer1= Integer.valueOf(n1);
//手动拆箱
int n2=integer.intValue();
//JDK5.0含5.0以后使用自动装拆箱
Integer integer2=n1;
//自动拆箱
int n3=integer2;
}
}
包装类和String 类型的基本转换
以Integer和String 相互转换举例:
public class Test {
public static void main(String[] args) {
//包装类和String 的互相转换
Integer i=100;
//包装类--->String 方法一:
String string =i+"";
//方法二:
String string1 =i.toString();
//方法三:
String string2= String.valueOf(i);//valueOf()括号里面放 Object object
//String ----->包装类
String string3="1234";
Integer integer1=Integer.parseInt(string3);//parseInt()得到int ,再自动装箱为包装类
Integer integer2=new Integer(string3);//构造器
}
}
Integer类和Character类的常用方法
经典面试题
源码解读:
只要是 new Integer()出来的一定是不同对象
只要有基本数据类型判断值是否相等
特别注意value[ ]是一个final类型,不可修改(这句话很容易搞混),不是说你字符数组value[ ]中的内容不能变化,
而是value不能指向新的地址,比如下面的value=v2就指向新地址
法一:String s=“hsp”;
法二:String s=new String (“hsp”);
最终返回的是常量池中对象的地址
调用intern()函数,假如常量池中已经有了等于String对象的字符串则返回池中的字符串
否则就创建一个String对象添加到池中,并返回该对象的引用
创建了两个对象
只创建了一个对象
创建了三个对象
String a=“abc”+“hello”;常量相加:看得是池
String a=b+c;变量相加看得是堆
注意创建String c的四部曲是怎么走的,注意变量相加和常量相加的区别
public class String_Test {
public static void main(String[] args) {
String a="hello";
String b="abc";
//debug得出步骤
//1、创建一个 StringBuilder sb=new StringBuilder();
//2、sb.append("hello");
//3、sb.append("abc");
//4、String c=sb.toString();
最后其实是c指向堆中的对象(String) value[] ->池中"helloabc"
String c=a+b;
String d="helloabc";
System.out.println((c==d));
String e="hello"+"abc";
System.out.println(d==e);//e指向常量池
}
}
结合传参机制,考虑创建String的内存布局
!!!重点这题做错了
考到了前面的基本数据类型和引用类型传参机制(可以看Java面向对象编程(基础)篇内容)
equals //区分大小写,判断内容是否相等
equalslgnoreCase//忽略大小写的判断内容是否相等
length//获取字符的个数,字符串的长度
indexOf//获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastIndexOf//获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1
substring() //截取指定范围的子串
substring(int index)//从index开始截取字符串剩余所有字符
substring(int start,int end)//注意左闭右开
trim//去前后空格
charAt:获取某索引处的字符,注意不能使用Str[index]这种方式.
toUpperCase//转化为大写
toLowerCase
concat//拼接
replace替换字符串中的字符
split 返回一个数组,分割字符串,对于某些分割字符,我们需要转义比如| 等
案例: String poem =“锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦”;和文件路径.
compareTo //比较两个字符串的大小
toCharArray l/转换成字符数组
format //格式字符串,%s字符串%c字符%d整型%.2f 浮点型案例,将一个人的信息格式化输出.
==注意StringBuffer存放字符串的数组char [ ]value 不再是final属性的了,所以存放在堆中
String 存放字符串的数组final char [ ] value 是final属性的,所以存放在常量池里 ==
1、StringBuffer stringBuffer = new StringBuffer();//默认创建一个大小为16的 char[],用于存放字符内容
2、通过构造器指定 char[]大小
StringBuffer stringBuffer1 = new StringBuffer(100);
3、源码规定:通过给一个String创建StringBuffer,char[ ]大小就是 str.length() + 16
StringBuffer hello = new StringBuffer(“hello”);
String s = “hello”;
方式1:
StringBuffer b1 = new StringBuffer(s);
方式2:
StringBuffer b2 = new StringBuffer();
b2.append(s);
方式1:
String s2 = b1.toString();//b1 [StringBuffer]
方式2:
String s3 = new String(b1);
1)增append
2)删delete(start,end)
3)改replace(start,end,string)
//将start----end间的内容替换掉,不含end
4)查indexOf //查找子串在字符串第1次出现的索引,如果找不到返回-1
5)插insert(int index)//在索引为index位置插入字符串,并且索引所在位置的字符需要自动往后移
6)获取长度length



