本帖最后由 黄玉昆 于 2013-2-10 11:34 编辑
下面是我通过翻看书籍和在网上找的一些资料,加了一些自己的理解,对字符串String一些浅显认识,希望对大家有所帮助: 一、定义: 1、从概念上讲,java字符串就是Unicode字符序列。每个用双引号括起来的字符串都是String类的一个实例。Java字符串由char序列组成,字符数据类型是一个采用UTF-16的编码表示Unicode代码点的代码单元。(大多数的常用Unicode字符使用一个代码单元就可以表示,而付诸字符需要一对代码单元表示。具体内容,请自行查阅相关资料或者百度,本人不在此赘述了。) 2 、格式:- String a = ”abc”;//存储在StringPool中
- String b = new String(”abc”)://存储在堆内存中
复制代码3 、StringPool (字符串池):有一个存放字符串的公共存储池,称为StringPool ,即字符串池。字符变量指向存储池中的相应位置。如果是通过复制一个字符串变量,原始的字符串和复制的字符串将共享这个相同的字符串。二、特点: 1、String是一种特殊的数据类型,可创建对象。 2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中 3、String是一个final的类型,即不可被继承修改,一经生成不可改变。 4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串 5、Java中的任何对象都可写成字符串的形式。 字符串不可变的原因: a. 可以想得出,每种固定的东西是不会改变的,1就是1,也就是说你若想改变,只得改变这个引用变量所指向的地址。 b. 编译器可以让字符串共享数据。所以不必改变字符串,直接改变变量即可。 c. java的开发者认为共享数据的效率要远远胜于提取、拼接字符串的效率。程序中对字符串的修改操作很少,更多的是对字符串进行比较 (例外:将源自于文件或键盘的单个字符或较短的字符串汇集成字符串。具体在下面会说到。) 三、构造字符串上面也提到了: 按键或者来自文件中的单词。采用字符串连接的方式达到此目的的效率是十分低的,每次连接字符串,都会构建一个新的String对象,既降低了效率,又占用大量的空间。通过使用StringBuilder类局可以避免这个问题。 构建格式:- StringBuilder bul = new StringBuilder();
复制代码 在构建字符串时就调用toString 方法,可以得到一个String 对象,其中包含构造器中的字符序列。如果要在字符串中“添加”一些内容,则可以使用append 方法。例子:- StringBuilder result = new StringBuilder();
- for (int i = 0; i < 10; i++)
- {
- result.append("a");
- result.append(" ");
- }
- System.out.println(result.toString());
复制代码 关于StringBuilder 的内容,我找了一些资料,如果想了解更多,可以参阅:http://blog.csdn.net/shengfeixiang/article/details/8577823 四、字符串方法: 下面给大家介绍几个比较常用的关于字符串的方法;如果还想了解更多关于字符串的方法,可以查看字符串API。 1、substring(a,b) -- 获得字符串的子串: String 类的方法substring 可以从一个较大的字符串提取出一个子串。方法的中a 代表字符串的其实位置(第一个是0 ),获得s.substring(a,b) 的长度是b-a 。例如:- String s= ”Hello”;
- String str = s.substring(0,3);//得到str = ”Hel”
复制代码2 、length -- 获得字符串的长度:length方法返回给定字符串的长度: - String s = ”Hello”;
- int n = s.length();//值为5
复制代码3、查找字符串及位置: 1 )charAt(int a) 方法:调用该方法将返回当前对象字符串中位置为a 的中的即字符。- char first = s.charAt(0);//first值为’H’
- char last = s.charAt(5);//first值为’o’
复制代码2 )indexof() 方法:如果想查找某些或某个字符串在语句或文章中的位置,可使用此方法,如果找到了这句话,引用变量将等于该文本的起始位置,否则返回-1. 如:- String dream = ” I have a dream that one day every valley shall be exalted”;//这是马丁路德金演讲中的一句话
- int position = dream.indexof(” Every valley shall be exalted”);//返回-1,因为e大写了
复制代码3 )转换字符串大小写:Java 是严格区分大小写的,若是想识别两个文本的值是否相等,可以使用这两个方法,如:(1) toUpperCase() :将所有字符串转换成大写 (2) toLowerCase() :将所有字符串转换成小写- String m = ”Hello”;
- String temp = m.toUpperCase();//结果为HELLO
复制代码4 、+ -- 字符串的拼接:Java 中使用 + 连接(拼接)两个字符串,+ 是按照给定的顺序将两个字符串拼接起来的。当一个字符串和一个非字符串进行拼接时,后者被转换成字符串(任何一个java 对象都可以转换成字符串。)例如:- String m = ”Expletive”;
- String n = ”add”;
- int num = 24;
- String pj = m + n + num; //pj得到的结果为:”” Expletiveadd24”
复制代码 一般多用于输出语句中:System.out.println(”Thename is ” + name); 5、intern()方法 该方法返回是始终都是StringPool中的对象。和String m = ”Hello”声明代码的效果实际上是一样的,使用intern返回的始终是StringPool中的对象。比如你首先使用String s = newString("abc")声明一个变量,然后判断s == s.intern()的话,那么会得到一个false,原因就是因为s是分配在堆中的一个新对象。
由于字数限制,下面还有关于总结的内容:
|