黑马程序员——包装类

来源:互联网 发布:微屏软件科技 陈路 编辑:程序博客网 时间:2024/05/21 10:46



 

 ------- android培训、java培训、期待与您交流! ----------

——————————————————————————————————————————————— 


22、String 类

|——string 类的特点:
字符串是常量,字符串对象一旦被初始化就不会改变,"abc"是一个对象
String s = "abc";
s = "sss";
字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
|--比较对象

String s1 = "abc";//创建一个字符串对象在常量池中
String s2 = "abc"; //在常量池中找到了“abc”这个对象,就直接赋给s2
System.out.println(s1.equals(s2)); //true
System.out.println(s1==s2);//true这里相等时因为常量池中已经有了abc这样一个对象

String s3 = new String ("abc");//在堆内存中创建一个字符串对象
String s4 = new String ("abc");
System.out.println(s2==s3);//false
System.out.println(s3.equals(s4)); //trueString类重写了equals方法

System.out.println(s1==s3);//false
System.out.println(s1.equals(s3)); //true
 
|--public int length()
返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。 
|--public char charAt(int index)
返回指定索引处的 char 值。索引范围为从 0 到 length() - 1。序列的第一个 char 值位于索引 0 处,第二个位于索引 1 
处,依此类推,这类似于数组索引。 
 
|--public int indexOf(int ch)   //这里也可以判断是否有某个字符(或者字符串)
返回指定字符在此字符串中第一次出现处的索引。如果在此 String 对象表示的字符序列中出现值为 ch 
的字符,则返回第一次出现该字符的索引(以 Unicode 代码单元表示)。对于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 
的值,返回值是 
this.charAt(k) == ch
为 true 的最小 k 值。对于其他 ch 值,返回值是 
this.codePointAt(k) == ch
为 true 最小 k 值。无论哪种情况,如果此字符串中没有这样的字符,则返回 -1。 
 
|--空格,ASCII码32
|--public String substring(int beginIndex,
                        int endIndex)   //包括头不包括尾
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 
处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 
 
|--判断 特殊的 compareTo方法
public int compareTo(String anotherString)
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 
对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 
对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 
对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 
时才返回 0。 
|-- intern() 方法

String s1 = new String("abc");  //在堆内存中创建了一个对象
String s2 = s1.intren();   // 这个对象到字符串池中找,如果找不到,就会再字符串池中创建一个
// 这里就相当于 String s2 = "abc";
|——StringBuffer 类
StringBuffer 是线程安全的
StringBuilder的append(String s)方法,只要字符串生成器所包含的字符序列s的长度没有超出此容量(原本容量是16个字符),
就无需分配新的内部缓冲区。
如果内部缓冲区溢出,则此容量自动增大。且增大他之前容量的 两倍加 2。
|——特点:(初始容量是16个字符)
长度是可变的
可以存储不同类型的数据
最终要转成字符串
|——StringBuider类(用法和StringBuffer一样)
StringBuider不是线程安全的
 

23、基本数据类型包装类
为了方便操作基本数据类型,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作
用于描述该对象的类就称为基本数据类型对象包装类
有八种基本数据类型
byte Byte
short Short
int Integer
char Character
long Long
float Float
boolean Boolean
 
 
|——Integer类 (用于基本数据类型和字符串之间的转换)
static int parseInt(String s) 将字符串转换为整数

String类中的静态方法将int类型的转换为String
static String valueOf(int i)
返回 int 参数的字符串表示形式。

情况一:使用静态方法
int retval = Integer.parseInt("123");
情况二:使用非静态方法
Integer i = new Integer("123");
int retval = i.intValue();

还有一个非静态方法:
int intValue();以 int 类型返回该 Integer 的值。
|—--进制转换
注-->注-->十进制转换为其他进制
转换为二进制:
static String toBinaryString(int i);
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 
转换为八进制:
static String toOctalString(int i);
以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 
转换为十六进制:
static String toHexString(int i);
以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 
 
注-->注-->转换为任意进制
String toString(int i,
                              int radix)
返回用第二个参数指定基数表示的第一个参数的字符串表示形式。 
 
注-->注-->其他进制转换 

static int parseInt(String s,
                           int radix)
                  
 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 
 '-' (
 '\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 
 是否返回一个负值确定)。返回得到的整数值。
 
比如讲一个数转换为十进制
Integer.parseInt("3c",10);   //得到结果是60
Integer.parseInt("110",10); //将110 转换为十进制数得到 6
 
 
|——jDK 1.5的新特性:自动装箱与拆箱

Integer i = 4; //自动装箱将基本数据类型变成对象
i = i + 5;  //自动拆箱  i = i.intValue()+5;

|—— flyweight 享元模式
1.5  以后,如果装箱的是一个字节 -128 ~ 127 ,那么该数据会被共享,不会重新开辟空间

享元对象做到共享的关键是区分内蕴状态(Internal State) 和外蕴状态(External State)
一个内蕴状态是存储在享元对象的内部不会因环境改变而有所不同一个享元可以具内蕴状态并可以共享
一个外蕴状态是随环境改变而改变,不可以被共享。享元对象的外蕴状态有客户端保存并在享元对象被创建之后,
在需要的时候在传递到享元对象的内部,外蕴状态不可以影响内蕴状态,它们是独立的。
Integer x = 110;
Integer y = 110;
System.out.println(x == y);  //在一个字节内,所以是 true

 

 ------- android培训、java培训、期待与您交流! ----------

———————————————————————————————————————————————