1) String a = "123456789";
2) String x = null;
3) String r = x.valueOf(a);
4) String s = a.valueOf(a);
5) System.out.print(r+"\n");
6) System.out.print(s);以上代码输出:
123456789
1234567893)、4)行是什么意思?
为什么输出的结果是一样?3)、4)行Eclipse提示“应该以静态方式访问类型 String 中的静态方法 valueOf(Object)”
怎么修改?

解决方案 »

  1.   


    3)、4)行是什么意思? 
    为什么输出的结果是一样? //都相当于new String(a);所以结果一样3)、4)行Eclipse提示“应该以静态方式访问类型 String 中的静态方法 valueOf(Object)” 
    怎么修改?//都换成String.valueOf(a);
      

  2.   

    valueOf()是static方法
    调用时应该String.valueOf()
    x是String的实例所以也可以x.valueOf()
    static不需要用实例调用,应该用String.valueOf()
      

  3.   

    valueOf()是String类的一个static方法,去看一下API文档,上面应该都有说明。
    静态方法的调用依靠的是类,而不是类的实例对象,即使用String类的实例对象x.valueOf(a)去调用,系统也会通过实例找到实例对象的类,再去调用静态方法String.valueOf(a)。
    修改后的代码:
    1) String a = new String("123456789"); 
    2) String x = null; 
    3) String r = String.valueOf(a); 
    4) String s = String.valueOf(a); 
    5) System.out.print(r+"\n"); 
    6) System.out.print(s); 所以你得到结果当然是一样的。你还应该注意到String的实例对象是一个常量。
    String str=new String("123456789");
    变量str的长度是不可改变的。
    你可能有疑问:str="我就要改变它的长度和值";//这样不就改了值也改了长度大小;
    要注意的是: 这个语句其实是给str重新new String("我就要改变它的长度和值");也就是重新分配了一个存储空间,在新分配的空间赋值,原来地址的值并没有变。有兴趣再去比较一下String类与StringBuffer类的区别。如果还有兴趣再看一下:http://topic.csdn.net/u/20080713/17/BA211D6E-CB22-4274-AB80-DEA990783F22.html
      

  4.   

    valueOf
    public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。 参数:
    obj - 一个 Object。 
    返回:
    如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
    另请参见:
    Object.toString()