第四章动手动脑

1.请运行以下示例代码StringPool.Java,查看其输出结果。如何释这种输出结果?从中你能总结出什么?

 

 

运行截图:   

在java中,内容相同的字符串常量只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。

两个变量值一样时,字符串==符号比较地址,所以前两个是true 

当直接使用new关键字创建字符串对象时,虽然值一致,但仍然是两个独立的对象。两个变量不同,所以是false

 

2.为什么会有这样的输出结果? 从中你又能总结什么?

 

 

 

给字串变量赋值意味着:两个变量()现在引用同一个字符串对象“a”!,String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象“a”无关,所以,返回false。代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。

3.

请查看String.equals()方法,学习其实现方法。

 

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {                      //判断anObject是不是String类的一个实例
String anotherString = (String)anObject;        //把anObject赋值给anotherString
int n = count;                                             //count是String的成员代表原始字符串长度
if (n == anotherString.count) { 
char v1[] = value;                                      //把原来的字符串和要比较的字符串以字符形式存入数组
char v2[] = anotherString.value; 
int i = offset;                                          //分别取数组下标
int j = anotherString.offset; 
while (n-- != 0) {                                   //遍历数组,比较 数组元素是否相同
if (v1[i++] != v2[j++])                          //在遍历的过程中如果有不同的就返回false
return false;


return true;                              //相等返回true
}
}
return false;                            //不是String实例返回false
}

4.整理String类

length()  求长度

  字符串A.length(); //返回int

charAt()  求指定位置的字符

  char a=字符串A.charAt(第几个);//返回一个字符

replace()

替换   原字符串中的某个字符并赋值给新字符串

语法

此方法定义的语法如下:

public String replace(char oldChar, char newChar)

toUpperCase()

转换为大写

被转换的字符串.toUpperCase()

toLowerCase()

转换为小写

被转换的字符串.toLowerCase()

trim() 去掉开头结尾的空格

toCharArray()  把字符串转换为字符数组

posted @ 2017-10-27 18:27  月影小歪  阅读(67)  评论(0编辑  收藏  举报