A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yi岁⑨很乖❤ 于 2015-4-13 21:03 编辑

Android交流区不能发帖,权限不够,是不是技术分太少了呢?
这是我的一道基础测试题,关于String类的详细解答,希望大家觉得我解答得不错的话,能给我技术分,
很像快点去黑马哦~~~ :#

  1. package com.itheima;

  2. /**
  3. * 6、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)

  4.         public class Test {
  5.                 public static void main(String[] args) {
  6.                        String s = "abc";
  7.                        s.substring(1);
  8.                        s.replace("bc", "xyz");
  9.                        System.out.println(s);
  10.                        String value = new String ("abc");
  11.                        System.out.println(s == value);
  12.                 }
  13.        }
  14.       
  15. * @author 佳露
  16. *
  17. */
  18. public class Test06 {

  19.         
  20.         public static void main(String[] args)throws Exception {
  21.                 /*
  22.                  * 【1】 创建一个String类型的引用变量s,指向常量池的实例对象"abc"。
  23.                  * "abc"这个对象放在字符串常量缓冲区,常量"abc"不管出现多少遍,都是缓冲区中的那一个。
  24.                  */
  25.                 String s = "abc";
  26.                
  27.                
  28.                 /*
  29.                  * 【2】 调用s的substring(int)方法; -> 完整定义为:public String substring(int beginIndex)
  30.                  * substring():用于截取从 起始位置beginIndex到最后 的字符串; 参数beginIndex:起始位置,返回一个新的字符串实例对象
  31.                  * 此处s对象调用substring方法,并没有改变变量s的指向地址,依旧指向"abc"。
  32.                  *
  33.                  *
  34.                  * 值得注意的是:String类是final类型的,因此不可以继承这个类、不能修改这个类。
  35.                  * 如果更改为 s = s.substring(1):
  36.                  *              此时s原本指向一个String对象"abc", 对象"abc"的值并没有改变,只是s不指向原来那个对象了,而指向了另一个 String对象,
  37.                  *    即s.substring(1)返回的一个新的String对象,内容为"bc"。
  38.                  *    原来那个对象"abc"还存在于内存之中,只是s这个引用变量不再指向它了。
  39.                  *   
  40.                  *    因为String对象建立之后不再改变,所以对String对象进行操作修改时都会新建一个对象,这样很容易造成内存的消耗,
  41.                  *    所以此时可以考虑使用StringBuffer类
  42.                  */
  43.                 s.substring(1);
  44.                
  45.                
  46.                 /*
  47.                  * 【3】 调用s的replace方法: -> 完整定义为:public String replace(CharSequence target, CharSequence replacement)
  48.                  * replace():用于将目标target替换为replacement字符串,返回一个新的字符串实例对象
  49.                  * 此处s对象调用replace方法,并没有改变变量s的指向地址,依旧指向"abc"。
  50.                  */
  51.                 s.replace("bc", "xyz");
  52.                
  53.                
  54.                 /*
  55.                  * 【4】 String类重写了Object的toString方法,可以直接打印出s指向的对象的值
  56.                  * 因为根据上述分析,String类型的变量s, 指向的对象没有改变,所以打印结果依然为"abc";
  57.                  */
  58.                 System.out.println(s);
  59.                
  60.                
  61.                 /*
  62.                  * 【5】 创建一个String类型的引用变量value, new String语句创建了一个对象,它根据字符串常量"abc"对象的内容来创建的一个新的String对象,
  63.                  * String s = "abc";中使用过"abc",所以就不会重新创建"abc",而是直接从字符串常量缓冲区中获取。
  64.                  * 然后将value指向这个新创建的String对象。
  65.                  */
  66.                 String value = new String ("abc");
  67.                
  68.                
  69.                 /*
  70.                  * 【6】 s变量和value变量,分别指向两个不同的对象,它们的首地址是不同的,也就是s和value存储的数值是不同的,
  71.                  * 所以,表达式s == value返回false;
  72.                  * 但是两个对象中的内容是相同的,所以如果表达式更改为s.equals(value)返回的就是true
  73.                  */
  74.                 System.out.println(s == value);
  75.                
  76.                
  77.         }

  78. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
艺多不压身丶 + 1 赞一个!

查看全部评分

30 个回复

倒序浏览
自己抢自己的沙发,大家过来围观哦
回复 使用道具 举报
注释好详细好详细
回复 使用道具 举报
Mr.南郭 发表于 2015-3-31 10:20
注释好详细好详细

是的呢,其实小小的,就涉及到的知识还是很多的,就写的详细了呢
回复 使用道具 举报
注释写的太详细了,看到了头晕,中文字比代码还要多,这可不好
回复 使用道具 举报
林吉前 发表于 2015-3-31 10:43
注释写的太详细了,看到了头晕,中文字比代码还要多,这可不好

这道题,本来就是分析题,所以注释多了些,请谅解啊:#
回复 使用道具 举报
呵呵,我也是新人,大家一起努力,加油啊
回复 使用道具 举报
yi岁⑨很乖❤ 发表于 2015-3-31 11:03
这道题,本来就是分析题,所以注释多了些,请谅解啊

可以在代码的上一行最前头加上//1、干嘛   //2、干嘛   //3、干嘛     这样看着一目了然
回复 使用道具 举报
林吉前 发表于 2015-3-31 12:09
可以在代码的上一行最前头加上//1、干嘛   //2、干嘛   //3、干嘛     这样看着一目了然 ...

嗯,的确会清楚很多的呢
回复 使用道具 举报
加油吧,萌妹子。。。啦啦啦啦啦。。
回复 使用道具 举报
kapp_tolo 发表于 2015-3-31 13:49
加油吧,萌妹子。。。啦啦啦啦啦。。

哈哈,谢谢~ 努力奋进!
回复 使用道具 举报
都是新人 也顺便来学习一下
回复 使用道具 举报
yi岁⑨很乖❤ 发表于 2015-3-31 10:37
是的呢,其实小小的,就涉及到的知识还是很多的,就写的详细了呢

好认真啊,一起学习吧
回复 使用道具 举报
这功力 已经无力
回复 使用道具 举报
写的很专业的样子
回复 使用道具 举报
看上去很不错,加油哦
回复 使用道具 举报

额,为什么呀~
回复 使用道具 举报
葛正翠 发表于 2015-3-31 23:26
看上去很不错,加油哦

谢谢哈~共同努力
回复 使用道具 举报

好呀好呀!
回复 使用道具 举报
{:2_40:}有妹子出没
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马