黑马程序员技术交流社区

标题: 【分析篇】(关于String类)String s = "abc"; [打印本页]

作者: yi岁⑨很乖❤    时间: 2015-3-30 23:56
标题: 【分析篇】(关于String类)String s = "abc";
本帖最后由 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. }
复制代码

作者: yi岁⑨很乖❤    时间: 2015-3-31 10:03
自己抢自己的沙发,大家过来围观哦
作者: Mr.南郭    时间: 2015-3-31 10:20
注释好详细好详细
作者: yi岁⑨很乖❤    时间: 2015-3-31 10:37
Mr.南郭 发表于 2015-3-31 10:20
注释好详细好详细

是的呢,其实小小的,就涉及到的知识还是很多的,就写的详细了呢
作者: 林吉前    时间: 2015-3-31 10:43
注释写的太详细了,看到了头晕,中文字比代码还要多,这可不好
作者: yi岁⑨很乖❤    时间: 2015-3-31 11:03
林吉前 发表于 2015-3-31 10:43
注释写的太详细了,看到了头晕,中文字比代码还要多,这可不好

这道题,本来就是分析题,所以注释多了些,请谅解啊:#
作者: 小罗同学    时间: 2015-3-31 12:03
呵呵,我也是新人,大家一起努力,加油啊
作者: 林吉前    时间: 2015-3-31 12:09
yi岁⑨很乖❤ 发表于 2015-3-31 11:03
这道题,本来就是分析题,所以注释多了些,请谅解啊

可以在代码的上一行最前头加上//1、干嘛   //2、干嘛   //3、干嘛     这样看着一目了然
作者: yi岁⑨很乖❤    时间: 2015-3-31 12:25
林吉前 发表于 2015-3-31 12:09
可以在代码的上一行最前头加上//1、干嘛   //2、干嘛   //3、干嘛     这样看着一目了然 ...

嗯,的确会清楚很多的呢
作者: kapp_tolo    时间: 2015-3-31 13:49
加油吧,萌妹子。。。啦啦啦啦啦。。
作者: yi岁⑨很乖❤    时间: 2015-3-31 13:54
kapp_tolo 发表于 2015-3-31 13:49
加油吧,萌妹子。。。啦啦啦啦啦。。

哈哈,谢谢~ 努力奋进!
作者: 冰心冷恋    时间: 2015-3-31 14:03
都是新人 也顺便来学习一下
作者: Mr.南郭    时间: 2015-3-31 16:56
yi岁⑨很乖❤ 发表于 2015-3-31 10:37
是的呢,其实小小的,就涉及到的知识还是很多的,就写的详细了呢

好认真啊,一起学习吧
作者: 13556793092    时间: 2015-3-31 20:47
这功力 已经无力
作者: 没劲睡觉    时间: 2015-3-31 21:18
写的很专业的样子
作者: 温暖的小白    时间: 2015-3-31 23:26
看上去很不错,加油哦
作者: yi岁⑨很乖❤    时间: 2015-4-1 23:47
13556793092 发表于 2015-3-31 20:47
这功力 已经无力

额,为什么呀~
作者: yi岁⑨很乖❤    时间: 2015-4-1 23:49
葛正翠 发表于 2015-3-31 23:26
看上去很不错,加油哦

谢谢哈~共同努力
作者: 温暖的小白    时间: 2015-4-2 00:17
yi岁⑨很乖❤ 发表于 2015-4-1 23:49
谢谢哈~共同努力

好呀好呀!
作者: P李勇    时间: 2015-4-2 01:50
{:2_40:}有妹子出没
作者: DxxD    时间: 2015-4-2 06:56
楼主一看就是95后。。。
作者: sunshine丶朱    时间: 2015-4-2 08:51
妹子,你好!妹子,再见!
作者: bianzhiguo6    时间: 2015-4-2 09:20
都是要走女强人的路啊!好好干。。。
作者: yi岁⑨很乖❤    时间: 2015-4-5 23:43
bianzhiguo6 发表于 2015-4-2 09:20
都是要走女强人的路啊!好好干。。。

谢谢! 我会继续奋进的!
作者: 1352107393    时间: 2015-4-6 00:50
真的特别细!
作者: 平底斜    时间: 2015-4-6 10:11
林吉前 发表于 2015-3-31 10:43
注释写的太详细了,看到了头晕,中文字比代码还要多,这可不好

火纹-索菲亚的复苏 好怀念····
作者: jxlovqqvo    时间: 2015-4-6 10:39
发现妹子一只:lol
作者: wkz_crystal    时间: 2015-4-6 11:26
呵呵,很详细,加油!!
作者: 林吉前    时间: 2015-4-6 11:58
平底斜 发表于 2015-4-6 10:11
火纹-索菲亚的复苏 好怀念····

{:2_39:}雅木
作者: windform    时间: 2015-4-6 13:51
好勤奋的妹纸哇,加油了啦。:)
以代码块的方式注释会程序的可读性会更好些。
作者: yi岁⑨很乖❤    时间: 2015-4-6 16:20
windform 发表于 2015-4-6 13:51
好勤奋的妹纸哇,加油了啦。
以代码块的方式注释会程序的可读性会更好些。 ...

分析题就全篇是我的理解了,注释多一点啦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2