----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
Blog_8_1字符串
(1) 定义:由多个字符组成的一串数据,字符串的实质是字符数组。
(2) String的构造方法:
A:String s = new String();
B:String s = new String(byte[] bys);
C:String s = new String(byte[] bys,int index,int count);
D:String s = new String(char[] chs);
E:String s = new String(char[] chs,int index,int count);
F:String s = new String(String str);
G:String s = "hello";
注意:由上可知字节数组和字符数组都可以通过构造方法转换为字符串
Blog_8_2String s=new String("hello") 和String s="hello"的区别
String s=new String(“hello”);在赋值过程中创建了两个对象、而String S=”hello”;在赋值过程中只创建了一个对象,下面分别画图来分析两种不同的方式赋值的过程。
(1) String s=”hello”;的赋值过程图解
首先,在栈中为s变量开辟了一个空间;然后在常量池中先把“hello”还原成一个个不重复的字符并储存,如上图由于l重复了,故只能储存一次。然后再在常量池中开辟另外一个空间,这个空间在从上一个空间中获取一个个字符,并还原成hello存储在这个新开辟的空间里面,再把此空间地址赋值给栈中s。
(2) String s=new String(“hello”);的赋值过程图解
1. 首先,在栈中为s变量开辟了一个空间;
2. 由于语句中出现了new关键字,所以在堆内存中开辟了一个空间。
3. 在常量池开辟一个空间构造hello,并产生一个地址值(到此步骤完全和String s=”hello”一样);
4. 然后把常量池产生的地址值赋值到堆内存中开辟的空间里面;
5. 最后把堆内存中的地址值赋值给变量s。
由此可见,String s=new String(“hello”);在内存中产生了两个对象。上述步骤可
用下面的图表示:
有了上面的概念,下面一些常见的疑惑就很容易解决了:
String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1==s2);//fasle
//由于new关键字出现了两次,s1和s2是两个不同的对象,故堆中的空间//地址值不一样
System.out.println(s1.equals(s2));//true
//此处比较的是字符串的内容,那肯定一样啊
String s3=new String("hello");
String s4="hello";
System.out.println(s3==s4);//fasel
// S3的地址值是堆内存中的地址值,而s4是方法区中的地址值,当然不//一样了
System.out.println(s3.equals(s4));//true
//String重写了equals()方法,比较的是内容,肯定一样
String s5="hello";
String s6="hello";
System.out.println(s5==s6);//true
System.out.println(s5.equals(s6));//true
//在方法区中都是从第一个空间中重构出来,如果系统发现重构的一样就直//接引用之前出现过的,故地址值当然相同了。
(3)关于字符串一旦被赋值就不能被改变的理解
可以通过下面例子来理解:
String s=”hello”;
s+=”world”;
由于字符串实质是字符数组,故当定义好一个字符串时就对应的产生了一个定长字符数组时,上面例子的过程其实是:
1. 为”world”分配一个存储空间并存储;
2. 用”hello”和”world”拼接成”helloworld”并存入系统提供的能存储”helloworld”的字符数组中,然后把此字符数组的地址赋值给s.
Blog_8_3常见功能
(1)判断功能
boolean equals(Object obj)判断个两个字符串是否一样
boolean equalsIgnoreCase(String str)忽率大小写判断两个字符串是否一样
boolean contains(String str)判断一个字符串中是否包含字符串str,则返回 true,否则返回 false
boolean startsWith(String str)判断一个字符串是否是以一个小字符串开头。
boolean endsWith(String str)判断一个字符串是否是以一个字符串结尾。
boolean isEmpty()当字符为空时返回true;当String a="";返回true
(2)获取功能
int length()获取字符串的字符长度;
char charAt(int index)返回字符串中指定索引值的字符
int indexOf(int ch)返回在此字符串中第一次出现指定字符处的索引。
int indexOf(String str);回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex) 返回指定子字符在此字符串中第一次出现处的索引
int indexOf(String str,int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引
String substring(int start)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
String substring(int start,int end)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。
(3)转换功能
byte[] getBytes() 把字符串转换到相应的数组中去。
char[] toCharArray()将此字符串转换为一个新的字符数组
static String copyValueOf(char[] chs)将字符串转化为字符数组
static String valueOf()可以将任意类型的转化为字符串
String toLowerCase()将字符串中字符全部转换为小写
String toUpperCase()将字符串中字符全部转换为大写
String concat(String str) 将指定字符串连接到此字符串的结尾
(4)其他功能
String replace(char old,char new)替换字符串中的一个字符
String replace(String old,String new)替换字符串中的一个子字符串
String trim()返回字符串的副本,忽略前导空白和尾部空白
int compareTo(String str)按字典顺序比较两个字符串。
int compareToIgnoreCase(String str) 忽律大小写按字典顺序比较两个字符串
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看: