黑马程序员技术交流社区

标题: object对象转换为String,String.valueOf()方法 [打印本页]

作者: 张小明    时间: 2011-7-29 01:30
标题: object对象转换为String,String.valueOf()方法
一直没注意String类的valueOf(Object obj)方法也可以将object对象转换为String,我用老代码实验了一下:
  1. public class test {
  2.    
  3.     public static void main(String[] args)throws Exception {           
  4.       person p1 = new person("ming",23);  
  5.       System.out.println(String.valueOf(p1));
  6.       
  7.     }
  8. }

  9.                 class person {
  10.                         private String name;
  11.                         private int age;
  12.                         public person(String name,int age) {
  13.                                 this.name = name;
  14.                                 this.age = age;
  15.                         }
  16.                         public void smile(){
  17.                                 System.out.println("hehe");
  18.                                 }
  19.                         public void laugh(){
  20.                         System.out.println("heihei");
  21.                         }
  22.                         public String toString(){
  23.                                 return name+":"+age;
  24.                                 }
  25. }
复制代码
结果是:ming:23
发现它和p1.toString()的结果是一样的,那String.valueOf()方法和toString方法有什么联系,使用上有区别呢?1
作者: 匿名    时间: 2011-7-29 01:44
valueOf方法是一个静态方法,使用类调用。
参数可以是对象,对象属性或者原始数据类型。
toString()用于对象。
作者: 詹季春    时间: 2011-7-29 01:52
在Java中将对象转换为String有Object#toString(),(String)要转换的对象,String.valueOf(Object)等方法
1、采用 Object#toString()方法如:[code=java]Object object = getObject();
System.out.println(object.toString()); [/code]java对象都可以调用此方法,因为.toString()方法是java.lang.Object类里已有public方法但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。
2、使用String.valueOf(Object)方法

String.valueOf(Object)的基础是Object#toString()。但它与Object#toString()又有所不同,前面例子中我们说道使用object.toString()时候须保证object不为null。
但是使用String.valueOf(Object)将不用担心object是否为null值这一问题,我们可以查看Jdk里String# valueOf(Object)源码[code=java]/**
* Returns the string representation of the Object argument.
*
* @param obj an Object.
* @return if the argument is null, then a string equal to
* "null"; otherwise, the value of
* obj.toString() is returned.
* @see java.lang.Object#toString()
*/

public static String valueOf(Object obj) {
       return (obj == null) ? "null" : obj.toString();
}[/code]从上面的源码可以很清晰的看出null值不用担心的理由。
不过这将在以后遇到问题,当object为null时,String.valueOf(object)的值是字符串”null”,而不是null!这是我们在使用的过程需要注意的地方
如果我们用 if(String.valueOf(object)==null){System.out.println(“传入的值是null!”);}这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上如下语句在执行的结果上有什么不同:[code=java]/*对于System.out.println的使用来说,在此处应当使用System.out.println(object)比System.out.println(object.toString())要好得多。此处如是用法主要是为了说明Object#toString()的用法。*/
System.out.println(String.valueOf((Object)null));
/*推荐使用System.out.println(String.valueOf((Object)null)); 不推荐使用System.out.println(String.valueOf(null));在使用重载方法时,这样做是一个好的习惯*/
System.out.println((Object)null); [/code]我们可以看到输出的结果都是一样的;null;
[ 本帖最后由 詹季春 于 2011-07-29  01:57 编辑 ]
作者: 匿名    时间: 2011-7-29 01:54
标题: 回复 楼主 的帖子
个人理解:
java.lang.String.valueOf(Object obj)返回 Object 参数的字符串表示形式而且是静态方法,得有类调用.
toString()可以重写,由对象调用。
作者: 匿名    时间: 2011-7-29 01:56
我的理解是:
String.valueOf(Object p1) 实际返回的是对象p1的toString()方法的值.

要说不同的话看下面代码:[code]Object  o = null;
System.out.println(String.valueOf(o));    //这里返回null
System.out.println(o.toString());     //这里将报错[/code]




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