黑马程序员技术交流社区

标题: 谁能告诉我s.length()方法内部是什么样子的,为什么样区别于s.length [打印本页]

作者: Dijkstra    时间: 2014-4-18 12:27
标题: 谁能告诉我s.length()方法内部是什么样子的,为什么样区别于s.length
谁能告诉我s.length()方法内部是什么样子的,为什么样区别于s.length
这个问题纠结欧文很久了也没想明白
作者: 清风有意    时间: 2014-4-18 12:43
String 类的源代码:
  1. private final char value[];
  2. public int length() {
  3.         return value.length;
  4.     }
  5.     public String(String original) {
  6.         this.value = original.value;
  7.         this.hash = original.hash;
  8.     }
复制代码

比如String s=new String("abc");
original就是"abc",original这个对象在常量池中就已经建立了。而original.value也被初始化。
作者: 呆呆沙师妹    时间: 2014-4-18 12:49
查看String.java的原文档可看到:
在String.java内部创建了private final char value[];
调用s.length()方法实际返回的是value这个数组的长度。
public int length() {
        return value.length;
    }

s.length这里s是字符串数组的引用变量吧?
数组都是Object类的一个子类的实例,可以把数组赋给一个Object变量,在类的层次结构中有个Array的子类(java.lang.reflect.Array),有个实例变量“length”。
作者: sanguodouble1    时间: 2014-4-18 13:40
很简单
length()方法是用于字符串的
而length是数组的一个属性,作用于数组的,
length()方法内部,其实还是调用的字符串数组的length属性
作者: Sniper_qiu    时间: 2014-4-18 13:57
length是属性,一般集合类对象拥有的属性,取得集合的大小。
例如:数组.length就是取得数组的长度。

length()是方法,一般字符串类对象有该方法,也是取得字符串长度。
例如:字符串.length();
作者: Peach2014    时间: 2014-4-18 14:24
请参考以下代码,简单的给你说一下,你应该就可以明白了;
带“()”的length(),表示的是对象的一个函数方法;
而length,表示的是对象的一个属性;
他们可以说具有相同的效果,但是根据对象的不同,使用的方法不同,有的对象中定义了length()方法,所以你可以调用,比如说“String”被java封装成了对象;有些对象中只定义了length属性,所以只能使用length来获得程度,不如说数组
int[] i = {1,2,3,4};
int j =i.length;

这两种方法都是用来获取长度的,就是看在对象中是如何定义的!如果按照一下代码,两种方法是一样的。

  1. class Simple
  2. {
  3.         Simple(int len)
  4.         {
  5.                 this.length = len;
  6.         }
  7.         public int length;
  8.         public int length()
  9.         {
  10.                 return length;
  11.         }
  12. }
复制代码





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