题目:撰写一个 myString class,其中包含一个String对象,可于构造函数中通过引数来设定初值。加入toString()和concatenate()。后者会将String对象附加于你的内部字符串尾端。请为myString()实现clone()。撰写两个static函数,令它们都接收myString reference  x引数并调用x.concatenate(“test”)。但第二个函数会先调用clone()。请测试这两个函数并展示其不同结果。
方法:
public class MyString implements Cloneable{
 /*撰写一个 myString class,其中包含一个String对象,
  * 可于构造函数中通过引数来设定初值。加入toString()和concatenate()。
  * 后者会将String对象附加于你的内部字符串尾端。
  * 请为myString()实现clone()。
  * 撰写两个static函数,令它们都接收myString reference  x引数并
  * 调用x.concatenate(“test”)。但第二个函数会先调用clone()。
  * 请测试这两个函数并展示其不同结果。
  */
 /*
  “ 撰写两个static函数,令它们都接收myString reference x引数
   并调用x.concatenate(“test”)。但第二个函数会先调用clone()。”
   本人觉得这个意思是:“撰写static函数,主要是因为static是属于类本身而不属于对象的,
   所以可以直接用类带点来访问,从而简化访问同时可以把对象作为参数而传递进去。而本程序
   想通过‘调用clone()’来拷贝,是想证明‘不调用clone()’时是对对象本身操作,而‘调用
   clone()’是对对象的副本操作而不影响对象本身”  
  */
 
 private String str;
 
 MyString(String str){
  this.str=str;
 }
 
 public String toString(){
  return str;
 }
 
 public void concatenate(String old){
  String newStr=new String();
  newStr=this.str+old;
  this.str=newStr;
 }
 
 public Object clone(){
   Object copyStr=null;
   try {
   copyStr=super.clone();
  } catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  return copyStr; 
 }
 
 public static void method1(MyString x){
  x.concatenate("test");
  System.out.println(x.toString());
 }
 
 public static void method2(MyString x){
  ((MyString)x.clone()).concatenate("test");
  System.out.println(x.toString());
 }
 
 public static void main(String[] args) {
  MyString myStr1=new MyString("ccp330-gucheng-");
  MyString.method1(myStr1);
  MyString myStr2=new MyString("ccp330-gucheng-");
  MyString.method2(myStr2);
  /*结果为:
  ccp330-gucheng-test
        ccp330-gucheng-
  */
 }
}