本帖最后由 yi岁⑨很乖❤ 于 2015-4-13 21:03 编辑
Android交流区不能发帖,权限不够,是不是技术分太少了呢?
这是我的一道基础测试题,关于String类的详细解答,希望大家觉得我解答得不错的话,能给我技术分,
很像快点去黑马哦~~~ :#
- package com.itheima;
- /**
- * 6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
- public class Test {
- public static void main(String[] args) {
- String s = "abc";
- s.substring(1);
- s.replace("bc", "xyz");
- System.out.println(s);
- String value = new String ("abc");
- System.out.println(s == value);
- }
- }
-
- * @author 佳露
- *
- */
- public class Test06 {
-
- public static void main(String[] args)throws Exception {
- /*
- * 【1】 创建一个String类型的引用变量s,指向常量池的实例对象"abc"。
- * "abc"这个对象放在字符串常量缓冲区,常量"abc"不管出现多少遍,都是缓冲区中的那一个。
- */
- String s = "abc";
-
-
- /*
- * 【2】 调用s的substring(int)方法; -> 完整定义为:public String substring(int beginIndex)
- * substring():用于截取从 起始位置beginIndex到最后 的字符串; 参数beginIndex:起始位置,返回一个新的字符串实例对象
- * 此处s对象调用substring方法,并没有改变变量s的指向地址,依旧指向"abc"。
- *
- *
- * 值得注意的是:String类是final类型的,因此不可以继承这个类、不能修改这个类。
- * 如果更改为 s = s.substring(1):
- * 此时s原本指向一个String对象"abc", 对象"abc"的值并没有改变,只是s不指向原来那个对象了,而指向了另一个 String对象,
- * 即s.substring(1)返回的一个新的String对象,内容为"bc"。
- * 原来那个对象"abc"还存在于内存之中,只是s这个引用变量不再指向它了。
- *
- * 因为String对象建立之后不再改变,所以对String对象进行操作修改时都会新建一个对象,这样很容易造成内存的消耗,
- * 所以此时可以考虑使用StringBuffer类
- */
- s.substring(1);
-
-
- /*
- * 【3】 调用s的replace方法: -> 完整定义为:public String replace(CharSequence target, CharSequence replacement)
- * replace():用于将目标target替换为replacement字符串,返回一个新的字符串实例对象
- * 此处s对象调用replace方法,并没有改变变量s的指向地址,依旧指向"abc"。
- */
- s.replace("bc", "xyz");
-
-
- /*
- * 【4】 String类重写了Object的toString方法,可以直接打印出s指向的对象的值
- * 因为根据上述分析,String类型的变量s, 指向的对象没有改变,所以打印结果依然为"abc";
- */
- System.out.println(s);
-
-
- /*
- * 【5】 创建一个String类型的引用变量value, new String语句创建了一个对象,它根据字符串常量"abc"对象的内容来创建的一个新的String对象,
- * String s = "abc";中使用过"abc",所以就不会重新创建"abc",而是直接从字符串常量缓冲区中获取。
- * 然后将value指向这个新创建的String对象。
- */
- String value = new String ("abc");
-
-
- /*
- * 【6】 s变量和value变量,分别指向两个不同的对象,它们的首地址是不同的,也就是s和value存储的数值是不同的,
- * 所以,表达式s == value返回false;
- * 但是两个对象中的内容是相同的,所以如果表达式更改为s.equals(value)返回的就是true
- */
- System.out.println(s == value);
-
-
- }
- }
复制代码 |