日期:2014-05-20  浏览次数:20606 次

关于java的字符串基础问题!!
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
123456789

3)、4)行是什么意思?
为什么输出的结果是一样?

3)、4)行Eclipse提示“应该以静态方式访问类型 String 中的静态方法 valueOf(Object)”
怎么修改?

------解决方案--------------------

3)、4)行是什么意思? 
为什么输出的结果是一样? //都相当于new String(a);所以结果一样

3)、4)行Eclipse提示“应该以静态方式访问类型 String 中的静态方法 valueOf(Object)” 
怎么修改?//都换成String.valueOf(a);
------解决方案--------------------
valueOf()是static方法
调用时应该String.valueOf()
x是String的实例所以也可以x.valueOf()
static不需要用实例调用,应该用String.valueOf()

------解决方案--------------------
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