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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ﹏゛心被伱牵 中级黑马   /  2012-10-26 19:07  /  2666 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class Foo {
        public static void main(String[] args) {
                String strValue="ABCDEFG";
                strValue.substring(3);
                strValue.concat("123");
                System.out.println("result=" + strValue);
               
                String value = new String ("ABCDEFG");
                System.out.println(strValue== value);

        }
}
求打印结果?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
ABC
false
回复 使用道具 举报
result=ABCDEFG
false
String类型的字符串在进行操作的时候,它的原来内容是不会改变的。如果想要保存方法操作的值,就应该重新赋给一个变量。
String与StringBuffer的区别,也是在这一块上。StringBuffer各种操作返回的是这个StringBuffer变量本身,而String操作返回的是另外一个String对象。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
打印的结果是
result=ABCDEFG
false
substring()返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。其实他并没有真的将源字符串截取掉。
而==比较的是俩个对象的栈地址,value和strValue的栈地址不同,而用equal的话,会返回true
回复 使用道具 举报
1、ABCDEFG
strValue.substring(3);
strValue.concat("123");
都是创建一个新的对象,不改变原来的

2、false
String strValue="ABCDEFG";
String value = new String ("ABCDEFG");
两个引用的内存地址不同
------------------------------------------------------------------------------------
楼主可以分别运行以下代码看看
String strValue = new String ("ABCDEFG");
String value = new String ("ABCDEFG");
-----------------
String strValue = "ABCDEFG";
String value ="ABCDEFG";

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
打印结果是:ABCDEFG,false
因为字符串是常量,它们的值在创建之后不能更改,所以String类的对象是不可变的,strValue和value是String的两个不同的对象,所以它们在内存中的地址也是不同的
回复 使用道具 举报
result=ABCDEFG  
false
回复 使用道具 举报
崔政 中级黑马 2012-10-27 18:30:09
8#
  1. package test;
  2. import java.util.*;
  3. class  Test2{
  4.      public static void main(String[] args) {
  5.              String strValue="ABCDEFG";
  6.          strValue.substring(3); //字符串被创建以后不会改变,这个是返回一个新的字符串
  7.          strValue.concat("123");//在字符串后面加上123,但是仍是返回一个新字符串,和原字符串没关系
  8.          System.out.println("result=" + strValue);//所以不变还是ABCDEFG
  9.          
  10.          String value = new String ("ABCDEFG");
  11.          //String value = "ABCDEFG";//如果是这样,就是true了,因为常量池中已经存在了ABCDEFG(第一句将ABCDEFG存入常量池),所以直接将该引用赋予value
  12.          System.out.println(strValue== value);//结果为false,因为是new String("ABCDEFG"),不同引用相比肯定是flase
  13.          


  14.       }
  15. }

复制代码
回复 使用道具 举报
聆听 中级黑马 2012-10-28 04:07:16
9#
ABCDEFG
false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马