java中的String整理
基础知识模块:
参考以下博客,写得很好,深入分析了String,需要重点掌握
http://www.tiantianbianma.com/java/java-basic/page/3/
http://www.cnblogs.com/xiaoxi/p/6036701.html
常用的api方法:
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
具体的说明可参考上面官方给的api说明,结合开发时使用
例子如下:
以下简单列举了一些,结合应用场景去使用,未提到的可以去查看上面官方的api
package test; public class test4 { public static void main(String[] args) { //常用的创建字符串方法 String str1 = new String("abcdefg1111"); String str2 = "abcdefg1111"; String str3="igklmn"; //1.字符串比较==与.equals区别,返回值都是Boolean型 System.out.println(str1==str2); System.out.println(str1.equals(str2)); //2.掌握字符串拼接(+与contact()方法)与字符串长度(返回int型) System.out.println(str1+"----"+str2); System.out.println(str1.concat(str3)); //contact()将指定的字符串拼接到末尾 System.out.println(str1.length()); //3.掌握字符串截取(subString)与替换(replace,replaceAll)与subsequence() System.out.println(str1.substring(1)); System.out.println(str1.substring(0, 5)); //包左不包右 System.out.println(str2.subSequence(0, 5)); //subStrig返回的是子字符串,subSequence返回的是子序列,是一组新的字符序列 System.out.println(str1.replace('1', '2')); System.out.println(str2.replaceAll("1", "")); System.out.println(str2.replaceFirst("1", "2")); //4.掌握String.valueof(),trim()方法,charAt()方法 String str4 = " www.baidu.com "; int a= 123; System.out.println(String.valueOf(a)); //返回去掉头尾空格的字符串 System.out.println(str4.trim()); //返回去掉头尾空格的字符串 System.out.println(str4.charAt(3)); //返回索引位置的字符,索引范围0到length-1 //5.掌握字符串大小写转换与忽略大小写的比较 String str5 = "AAbb"; String str6 = "aabb"; System.out.println(str5.toLowerCase()); System.out.println(str5.toUpperCase()); System.out.println(str5.equalsIgnoreCase(str6)); } }
摘抄:
以下为从第一个标题摘抄下来的笔记,具体的分析看链接(果真在源码面前没有任何秘密可言)
1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
2)上面列举出了String类中所有的成员属性,从上面可以看出String类其实是通过char数组来保存字符串的。
从上面的三个方法可以看出,无论是sub操作、concat还是replace操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。
在这里要永远记住一点:“String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”
3):字符串常量池的概念:类似于数据库连接池的概念,由于字符串操作是非常非常常见的,在分配对象的时候是需要消耗高昂的空间和资源。
JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串(这点对理解上面至关重要)
Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。
所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池