笔记的都是需要背诵的零散知识点,以顺序的方式组织
文章目录
- java基础
- 包装类
- 1、包装类分类
- 2、包装类和基本数据类型的转换
- 3、int Integer转换
- 4、包装类型和String类型转换
- 5、Integer 类和 Character 类的常用方法
- 6、String类
- 7、StringBuffer
- 8、StringBuilder
- 9、String、StringBuffer 和 StringBuilder 的比较
- 10、String、StringBuffer 和 StringBuilder 的选择
包装类 1、包装类分类
- 八大基本数据类型包装成类,就有了类的特点,可以调用类的方法,能够更好的,更方便的使用。
2、继承关系
1.jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱
2. jdk5以后(含jdk5)的自动装箱和拆箱方式
3.自动装箱底层调用的是valueOf方法,比如Integer.valueof
4.其它包装类的用法类似.不—举例
(1)手动装箱int->Integer
int n=100;
Integer integer1 =new Integer(n);
Integer integer2 =Integer.ValueOf(n);
(2)手动拆箱Integer->int
int i=interger1 .intValue();
(3)自动装箱int->integer
int n=100;
Integer integer3=n;
//底层使用的是Integer.ValueOf(n)
(4)自动拆箱Integer->int
int n3=integer2;
//底层使用的仍然是intValue()方法
Integer i=100//自动装箱
(1)包装类型Integer->String
- 方式1:
String str1=i+""; - 方式2:
String str2=i.toString(); - 方式3:
String str3=String。valueOf(i);
(2)String->包装类(Integer)
String str4=“12345”;
Interger i2=Integer .parseInt(str4);
//使用到自动装箱
Integer i3=new Integer(str4)//构造器
- System.out.printIn(Integer.MIN_VALUE);//返回最小值
- System.out.println(Integer.MAX_VALUE);/返回最大值
- System.out.println(Character.isDigit(‘a’));//判断是不是数字
- System.out.printIn(Character.isLetter(‘a’));//判断是不是字母
- System.out.printIn(Character.isUpperCase(‘a’));//判断是不是大写
- System.out.println(Character. isLowerCase(‘a’));//判断是不是小写
- System.out.println(Character. isWhitespace(‘a’));//判断是不是空格
- System.out.printIn(Character.toUpperCase(‘a’));/I转成大写
- System.out.printIn(Character.toLowerCase(‘A’));/转成小写
(1)String类
- String对象用于保存字符串,也就是一组字符序列
- 字符串的字符使用Unicode字符编码,一个字符占两个字节(不区分字母还是汉字)
- String类较常用构造器(看api)
- 继承关系:
- String类实现了接口Serializable【String 可以串行化:可以在网络中传输】
- String类实现了接口Comparable【String对象可以比较大小】
- String 是fianl类,不能被其他类继承
- String有属性 private fianl char value[];用于存放自字符串内容
- 注意:value是fianl类型,不可以修改,即value不能指向新的地址,但是单个字符内容是可以变化的
(2)创建String对象
方式一:直接赋值 String s =“asfdgh”;
方式二:调用构造器String s =new String(“adsfgh”);
两种创建方式的区别:
- 方式一:先从常量池查看是否有"hsp”数据空间,如果有,直接指向;如果没有则重新创建,然后指向。S最终指向的是常量池的空间地址
- 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间.如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
- 内存分布图
- 当调用intern 方法时,如果池已经包含一个等于此String对象的字符串(用equals(Qbject)方法确定),则返回池中的字符串。否则,将此 String对象添加到池中,并返回此 String对象的引用,b.intern()方法最终返回的是常量池的地址(对象)﹒
(3)字符串的特性
- String是一个final类,代表不可变的字符序列
- 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的。
(4)String类常见方法
- String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因比java设计者还提供了StringBuilder 和 StringBuffer来增强String的功能并提高效率。
第一组: - equals //区分大小写,判断内容是否相等
- equalslgnoreCase//忽略大小写的判断内容是否相等
- length//获取字符的个数,字符串的长度
- indexOf//获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返-1
- lastIndexOf//获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1
- substring //截取指定范围的子串
- trim//去前后空格
- charAt:获取某索引处的字符,注意不能使用Str[index]这种方式
第二组: - toUpperCase 转换成大写
- toLowerCase转换成小写
- concat 拼接字符串
- replace 替换字符串中的字符,s1.replace() 方法执行后,返回的结果才是替换过的。注意对 s1 没有任何影响
- split 分割字符串, 对于某些分割字符,我们需要 转义比如 | 等
- toCharArray 转换成字符数组
- compareTo 比较两个字符串的大小,如果前者大, // 则返回正数,后者大,则返回负数,如果相等,返回 0
- format 格式字符串
(1)StringBuffer 可变长度字符序列,可以对字符串内容进行增删,StringBuffer是一个容器
(2)StringBuffer解读
- StringBuffer 的直接父类 是 AbstractStringBuilder
- StringBuffer 实现了 Serializable, 即 StringBuffer 的对象可以串行化
- 在父类中 AbstractStringBuilder 有属性 char[] value,不是 final ,该 value 数组存放 字符串内容,引出存放在堆中的
- StringBuffer 是一个 final 类,不能被继承
- 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除) ,不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String,放在堆中
(3)String->StringBuffer
(4)StringBuffer->String
(5)StringBuffer常见方法
-
s.append(“张三丰”);//“hello,张三丰”
s.append(“赵敏”).append(100).append(true).append(10.5);//“hello,张三丰赵敏 100true10.5”
追加,连续追加 -
s.delete(11, 14);删
-
s.replace(9, 11, “周芷若”);改
-
int indexOf = s.indexOf(“张三丰”);
查找指定的子串在字符串第一次出现的索引,如果找不到返回-1 -
s.insert(9, “赵敏”); System.out.println(s);
//“hello,张三丰赵敏周芷若 true10.5” -
s.length()长度
(1)一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类因为在大多数实现中,它比 StringBuffer 要快[后面测]。
(2)在 StringBuilder上的主要操作是 append和 insert方法,可重载这些方法,以接受任意类型的数据。
(3)StringBuffer 解读
- StringBuffer 的直接父类是AbstractStringBuilder
- StringBuffer 实现了Serializable,即 StringBuffer的对象可以串行化
- 在父类中AbstractStringBuilder有属性char[] value,不是finall
- 该value数组存放字符串内容,引出存放在堆中的
- StringBuffer是一个final类,不能被继承
- 因为StringBuffer字符内容是存在 char[] value,所有在变化(增加/删除)不用每次都更换地址(即不是每次创建新对象),所以效率高于String



