问个问题:为什么String类没有 clone方法?

06-08-15 zhangsl

在java里,String的定义是public final class String extends Object implements Serializable, Comparable, CharSequence 正常情况,String必然有clone方法,因为Object类里有clone方法,在Object里,clone方法的定义是:protected native Object clone().但是下面的代码肯定出错:

String s=new String("");

Object o=s.clone()

提示:clone方法不可见!

请问,这是为什么?

zhangsl
2006-08-15 15:10

水能帮我解决一下?

banq
2006-08-15 18:18

Java在多个String引用中分享的是一个单个的字符串,String具有不变性immutable. 所以,无法克隆

zhangsl
2006-08-16 21:16

多谢多谢。多谢banq帮忙

zhangsl
2006-08-17 09:04

在另外一个地方,网友的回答我觉得更接近我问的问题。引用在这里,可能这是基本的概念,是我没掌握。让banq兄费心了,谢谢。

yanhuahuo---

protected比package权限多一点的地方就在于可以被子类引用。但它同package一样不能被非该包中的其他类引用。

String所在的包为java.lang.String,而你自己写的类却不在这个包中,所以你不能访问到clone方法。

举个例子:

package com.sina.www;

public class A{

protected void function(){}

}

package com.sina.www;

public class B extends A{}

}

package com.sina.www;

public class AppOne{

public static void main(String[] args){

B b = new B();

b.function();//这是正确的。

}

}

package net.nytimes.www;

public class AppTwo{

public static void main(String[] args){

B b = new B();

b.function();//错误。因为不在同一包中。这和你所说的情况是一样的

}

}

2Go 1 2 下一页