`
dolonfly
  • 浏览: 1009 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

探究java中的substring()方法

阅读更多

前几天在做一个小程序,突然想到了先到了双等号和equals的区别,这个大家都知道:除了基本类型外,双等号判断地址是否相等,equals是判断对象的值是否相等。这个就是写本文章的前提。

那么String类中的subString(int i)函数中传递参数0时,是新建一个对象呢还是用原来的对象呢?我们拿例子来说明。

java code: 

 

        String hello = "hello world"; 
        String world = hello.substring(0); 
        System.out.println(hello); 
        System.out.println(world); 
        System.out.println(hello == world); 
        System.out.println(hello.equals(world)); 

 输出结果:

 

hello world 
hello world 
true 
true 

输出结果是两个true,后面那个true很容易想到(字符串相等),但前一个true就表名了字符串对象所在的地址也是相同的,也就是说是同一个。

这是为什么呢?看下面jdk中的源代码:

 

public String substring(int beginIndex) { 
    return substring(beginIndex, count); 
    } 
 
   public String substring(int beginIndex, int endIndex) { 
    if (beginIndex < 0) { 
        throw new StringIndexOutOfBoundsException(beginIndex); 
    } 
    if (endIndex > count) { 
        throw new StringIndexOutOfBoundsException(endIndex); 
    } 
    if (beginIndex > endIndex) { 
        throw new StringIndexOutOfBoundsException(endIndex - beginIndex); 
    } 
    return ((beginIndex == 0) && (endIndex == count)) ? this : 
        new String(offset + beginIndex, endIndex - beginIndex, value); 
    } 

 可以看到这样的一句:

 

return ((beginIndex == 0) && (endIndex == count)) ? this : 
        new String(offset + beginIndex, endIndex - beginIndex, value); 

 如果前面的条件成立则返回this,也就是字符串所处地址的引用 ,所以得出不管是字符串本身还是所对应的地址都是同一个。

 

分享到:
评论
2 楼 WoKo_Jb 2012-06-07  

搜噶!

理解的好深那!!


1 楼 阿拉丁没有神灯 2012-05-15  
学习了  顶你

相关推荐

    传智播客2015年JAVA基础班视频教程(全套)

    10. **反射机制**:探究Java运行时动态加载类的能力,如何通过反射获取类信息、创建对象、调用方法。 11. **枚举与注解**:理解枚举类型的作用和使用场景,以及注解的定义和应用。 12. **泛型**:学习泛型的概念,...

    Java 2实用教程(第3版)教学课件

    16. **反射机制**:探究Java的运行时类型信息,通过反射动态地访问类、接口、字段和方法。 17. **JDBC数据库编程**:学习如何连接数据库,执行SQL语句,处理结果集,以及事务管理。 18. **Java 8新特性**:介绍...

    怎样用Jvm处理Java数组.doc

    这是因为数组的`.length`是一个内置的成员变量,而字符串的`.length()`是一个方法,这是由于字符串在Java中是一个对象,实现了许多额外的方法,如`substring()`和`indexOf()`等。 当我们创建一个Java数组时,例如`...

    UniqueProject:考试项目 2 CMP112

    6. **字符串处理**:Java中的String类提供了丰富的字符串操作方法,如substring、indexOf、replace、trim等,对于处理文本数据十分方便。 7. **多线程**:如果项目涉及到并发处理,就需要用到Java的线程概念,如...

    KWIC-KWAC-KWOC:CS3219作业1

    4. **字符串操作**:掌握Java中的字符串方法,如split()、substring()和indexOf()等。 5. **信息检索**:学习关键词提取和上下文分析的基本原理。 6. **统计分析**:可能涉及到统计方法,如频率计算或相关性分析。 7...

Global site tag (gtag.js) - Google Analytics