黑马程序员--字符串String总结

--------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------  下面是我通过翻看书籍和在网上找的一些资料,加了一些自己的理解,对字符串String一些浅显认识,希望对大家有所帮助:
一、定义:
1、从概念上讲,java字符串就是Unicode字符序列。每个用双引号括起来的字符串都是String类的一个实例。Java字符串由char序列组成,字符数据类型是一个采用UTF-16的编码表示Unicode代码点的代码单元。(大多数的常用Unicode字符使用一个代码单元就可以表示,而付诸字符需要一对代码单元表示。具体内容,请自行查阅相关资料或者百度,本人不在此赘述了。)
2、格式:
  1. String a = ”abc”;//存储在StringPool中
  2. 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 类局可以避免这个问题。
构建格式:
  1. StringBuilder bul = new StringBuilder();
复制代码
在构建字符串时就调用toString 方法,可以得到一个String 对象,其中包含构造器中的字符序列。如果要在字符串中“添加”一些内容,则可以使用append 方法。 例子:
  1. StringBuilder result = new StringBuilder();
  2. for (int i = 0; i < 10; i++)
  3. {
  4. result.append("a");
  5. result.append(" ");
  6. }
  7. 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 。例如:
  1. String s= ”Hello”;
  2. String str = s.substring(0,3);//得到str = ”Hel”
复制代码
2 length --  获得字符串的长度:
length 方法返回给定字符串的长度:
  1. String s = ”Hello”;
  2. int n = s.length();//值为5
复制代码
3 、查找字符串及位置:
1 charAt(int a) 方法: 调用该方法将返回当前对象字符串中位置为a 的中的即字符。
  1. char first = s.charAt(0);//first值为’H’
  2. char last = s.charAt(5);//first值为’o’
复制代码
2 indexof() 方法: 如果想查找某些或某个字符串在语句或文章中的位置,可使用此方法,如果找到了这句话,引用变量将等于该文本的起始位置,否则返回-1. 如:
  1. String dream = ” I have a dream that one day every valley shall be exalted”;//这是马丁路德金演讲中的一句话
  2. int position = dream.indexof(” Every valley shall be exalted”);//返回-1,因为e大写了
复制代码
3 )转换字符串大小写:Java 是严格区分大小写的,若是想识别两个文本的值是否相等,可以使用这两个方法, 如:
(1) toUpperCase()  :将所有字符串转换成大写
(2) toLowerCase()  :将所有字符串转换成小写
  1. String m = ”Hello”;
  2. String temp = m.toUpperCase();//结果为HELLO
复制代码
4 +  --  字符串的拼接:
Java 中使用 +  连接(拼接)两个字符串,是按照给定的顺序将两个字符串拼接起来的。当一个字符串和一个非字符串进行拼接时,后者被转换成字符串(任何一个java 对象都可以转换成字符串。)例如:
  1. String m = ”Expletive”;
  2. String n = ”add”;
  3. int num = 24;
  4. 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 是分配在堆中的一个新对象。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值