A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张小明 黑马帝   /  2011-7-29 01:30  /  3993 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一直没注意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

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 很不错哦。

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-29 01:44:43
沙发
valueOf方法是一个静态方法,使用类调用。
参数可以是对象,对象属性或者原始数据类型。
toString()用于对象。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
在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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 看你的回帖很爽。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 01:54:18
板凳

回复 楼主 的帖子

个人理解:
java.lang.String.valueOf(Object obj)返回 Object 参数的字符串表示形式而且是静态方法,得有类调用.
toString()可以重写,由对象调用。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 唉,不懂技术。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 01:56:14
报纸
我的理解是:
String.valueOf(Object p1) 实际返回的是对象p1的toString()方法的值.

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

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马