字符串的动手动脑
- 动手动脑
<1>请运行以下代码,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
运行结果:
原因及总结:
在java中,内容相同的的字符串常量(“Hello”)中保存在一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。
编译器在编译s2一句时,会去掉“+”号,直接把两个字符串连接起来得到一个子串(“Hello”)。这种优化工作由java编译器自动完成。
当直接使用new关键字创建字符串对象时,虽然值是一致的(都是“Hello”),但仍然是两个对立的对象。
<2>再看以下代码,为什么会有这种输出结果,又可以总结什么?
运行结果:
总结:
给字符串赋值意味着:两个变量(s1,s2)现在引用的是同一个变量“a”!
String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,而代码中的“ab”字符串是一个常量,它所引用的字符串与“ab”对象无关。
String.equals()方法可以比较两个字符串的内容。
2.请查看String.equals()方法的实现代码,注意学习其实现方法。
3.String.length()
String的长度实际上就是它的属性--char型数组value的长度。数组是没有length()方法的,大家知道,在JAVA中,数组也被作为对象来处理,它的方法都继承自Object类。数组有一个属性length,这也是它唯一的属性,对于所有类型的数组都是这样。
4.String.charAt()
描述:此方法返回位于字符串的指定索引处的字符。该字符串的索引从零开始。
语法:如下
public char charAt(int index)
参数:这里是参数的细节:index -- 返回字符的索引。
返回值:该方法的返回指定索引。
例子:
结果如下:a
5.String.replace()
将原string 中的元素或子串替换。返回替换后的string。
(1)用string 或C-string 代替操作string 中从 Pos1 开始的 Num1 个字符
代码:
(2)用string 中从 Pos2 开始的 Num2 个字符,代替操作string 中从 Pos1 开始的 Num1 个字符
代码:
(3)用 Count 个character _Ch , 代替操作string 中从 Pos1 开始的 Num1 个字符
代码:
(4)用string 或C-string ,代替操作string 中从 First0 到 Last0 的字符
代码:
(5)用string 中从 _Pos2 开始的 _Num2 个字符,代替操作string 中从 First0 到 Last0 的字符
用C-string 中的 _Num2 个字符,代替操作string 中从 First0 到 Last0 的字符
(6)用 _Count 个character _Ch , 代替操作string 中从 First0 到 Last0 的字符
6.String.toUpperCase()和String.toLowerCase()
(1)toUpperCase的意思是将所有的英文字符转换为大写字母
如:String cc = “aBc123”.toUpperCase();结果就是:ABC123
(2)toLowerCase的意思是将所有的英文字符转换为小写字母
如:String cc = “aBc”.toUpperCase();结果就是:abc。
备注:这两个方法只对英文字母有效,对除了A~Z和a~z的其余字符无任何效果。
7.String.trim()
String.Trim()方法会去除字符串两端,不仅仅是空格字符,它总共能去除25种字符:
('/t', '/n', '/v', '/f', '/r', ' ', '/x0085', '/x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', '/u2028', '/u2029', ' ', '?')
如果你想保留其中的一个或多个(例如/t制表符,/n换行符,/r回车符等),请慎用Trim方法。
请注意,Trim删除的过程为从外到内,直到碰到一个非空白的字符为止,所以不管前后有多少个连续的空白字符都会被删除掉。
8.String.toCharArray()
将此实例中的字符复制到 Unicode 字符数组。
就是将字符串转换成字符数组