一、包装类
Java语言是一种面向对象的语言,但对于基本数据类型却不是面向对象的,为了解决这个不足,在设计类时把每一中基本数据类型都设计了与之对应的引用数据类型(包装类),注:包装类都位于java.lang包下的
对应关系如表
基本数据类型 | 包装类 |
int | Integer |
Char | Character |
short | Short |
byte | Byte |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
在这里就不讨论基本的包装类类型和基本类型的转换,过于麻烦,在JDK1.5之后,java能够自动实现包装类和基本数据类型的转换如图
1.基本数据类型转化为包装类
2.包装类转化为基本类型
3.在Integer类中有几个方法需要讨论一下
3.1 parseInt(String s):将字符串型的数字转化为int类型的数字,注意这个若能转的话,这个字符串型的数字中不能含有别的东西
二、字符串相关类(String、StringBuilder、StringBuffer)
1.String类
(1)String类代表字符串类型,字符串的内容本身不可改变,定义的字符串存放于堆中的"字符串常量池"中,而字符串常量池位于堆内存中,故一个字符串就是一个匿名对象。这个很有意思哈。
(2)String类的两种实例方法:
a:直接赋值法:String str = "Hello";
b:间接赋值法:new String("Hello"),这个赋值方式是先在字符串常量池中创建一个字符串对象,在将这个字符串复制一份到外面的堆内存中,这个还挺关键的;
(3)一个字符串就是一个String类的匿名对象,所谓匿名对象,就是在堆内存中开辟出了一块空间,但在栈内存中没有对应的引用。
(4)讨论一下字符串中常用的方法(很重要哈)
1. public String(byte[] bytes): String的构造方法,使用平台默认的字符集解码,将字节数组转为字符串;
2. public String(byte[] bytes,Charset charset): String的构造方法,使用指定的字符集解码;
3. char charAt(int intdex): 根据索引位置查找字符串中对应的字符,索引从0开始;
4. boolean equals(Object obj): String类重写了Object的equals()方法,比较字符串内容是否相同;
5. boolean contains(charSequence s): 判断当前对象代表的字符串是否包含参数字符串的内容;
6. byte[] getBytes(): 返回字符串对应的字节的字节数组
7. int indexOf(String str):返回参数字符串或参数字符在字符串中第一次出现的索引位置
8. int length():返回字符串的长度
9. String toUpperCase,toLowerCase():将字符串中的字母变为大写/小写
10. toCharArray():将字符串改为字符数组;
11 subString(int beginIndex,int endIndex): 截取指定字符串,并不是真的截取,而是获得了原先字符串中指定的内容,创建新的字符串
12. String trim(): 将字符串左右两边的空格删除
13. String[] spilt(String regex):将字符串按照字符串指定的字符分隔字符串,并返回一个字符串数组;
方法很多,重点是多用多记,灵活运用,就不测试了。
(5)字符串中的一些坑啊
5.1 看以下代码
内存中发生了这些事情
2.
内存中发生这些事:
(6)StringBuffer(线程安全类)
1.StringBuffer类代表可变的字符串序列,成为字符串缓冲区,他的工作原理是预先申请一块内存,存放字符序列,若字符序列满了,会重新改变缓存区的大小,从而容纳更多的字符序列;这就比String创建的字符串对象牛皮,因为String定义的字符串是死的,不能改变,如果字符序列变大了,其实是创建了新的字符串哈
2.StringBuffer是可变对象,这个是与String的最大不同,如果连续操作String对象,则会产生大量的垃圾,而且不断“断开——连接”
3. append(String str)方法:就是拼接字符串,很重要一方法
4.reverse()方法:返回反转后的字符串去带原来的字符串
5.insert(int offset,Object obj):在某个位置插入obj
StringBuider类和StringBuffer类一样,不过StringBuider是线程不安全的,其他用法都一样
6.特别强调一哈:字符串类型的量在比较时:equals()方法比较的是字符串的内容,"=="比较的是字符串的内存地址,即使是相同内容的字符串,用"=="比较时也可能为false。