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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 艾提儿 初级黑马   /  2014-8-18 23:02  /  3339 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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);
                }
       }

10 个回复

倒序浏览
本帖最后由 迷失的独白 于 2014-8-18 23:14 编辑

abc
false
我表达力不好
创建一个字符串,s指向了abc
调用s的sbstring(),返回abc1,有返回值,但是没有变量接受,abc1在内存中会被释放掉
同理调用s的replace,返回axyz1,有返回值,但是没有变量接受,axyz1在内存中会被释放掉
打印为abc
在内存中创建两个对象
s!=value
其实System.out.println(s.equals(value));是true
判断字符串是否相等
回复 使用道具 举报
结果是abc和false因为s=abc是在常量池中而String value = new String ()是在内存中开辟了空间地址就不相同
所以而==比的是地址所以为false,replace 替换了值没有变量接收结果相当于值未改变
回复 使用道具 举报
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         String s = "abc";  //s指向常量池中的"abc"常量
  4.         s.substring(1);  // s 任然为"abc"
  5.         s.replace("bc", "xyz");  //s 任然为"abc"
  6.         System.out.println(s);   //输出"abc"
  7.         String value = new String ("abc");  //value指向堆内存中的String对象
  8.         System.out.println(s == value);  //一个在对象常量池中,一个在堆内存中,所以返回false
  9.         }
  10.        }
复制代码


回复 使用道具 举报
abc; false;
回复 使用道具 举报
字符串是常量,一般是存放在字符串常量池中,且一旦创建就无法改变,我们使用字符串的常用方法去操作字符串时,大多数情况下都是产生了一个新的字符串,而本身原有的字符串的内容是不变的,它与StringBuffer不同,而且,字符串的两种创建方式(字面值和new的方式)是有区别。
回复 使用道具 举报
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
回复 使用道具 举报
赞一个,分享快乐
回复 使用道具 举报
不错。。。
回复 使用道具 举报

分析的一点都不准确,乱分析,误人子弟
回复 使用道具 举报
public class Test6 {
          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);
                 /*
                  * s.substring(1);的作用是从第一个位置输出输出的结果也就是"bc"但是字符串s不变
                  * s.replace("bc", "xyz");的作用是用xyz替换s中所有的bc,同样s也不便。
                  * 由于==是比较两个数的地址值虽然s和value都是abc但是地址值不同所以不等,返回false
                  * 因为String s = "abc"定义的abc是存在常量池里面的有一个地址值,而在String value = new String ("abc");
                  * 中常量池中的abc地址值给了value,但是指向栈的地址值在堆空间创建了一个实体的地址值与常量池赋给value的地址值不同,
                  * 所以返回的是false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马