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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄敏 中级黑马   /  2012-8-10 13:57  /  1995 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄敏 于 2012-8-10 14:23 编辑


class Test02 {
        
        //实现字符串反转功能
        public static void main(String args[]) {
                String s = "abcdefg";
                //字符串转换数组
                char sh[]= s.toCharArray();
                //数组反转
                reverse(sh);
                // 数组转换字符串
                String s1 = sh.toString();//用toString方法  打印出的结果是:[C@18c56d,用valueOf()打印出的结果是:gfedcba,我查看源代码中valueOf方法也是调用toString方法的,按理说我这个代码中用toString方法打印的结果和用valueOf方法应该是一样的啊,怎么就不一样了呢?
用toString怎么实现
打印出的结果是:gfedcba?
toString()和valueOf()区别在哪?在实际开发中这两个方法什么时候该用哪个,什么时候不该用哪个?

                System.out.println(s1);
        }
        public static void reverse(char array[]){
                for(int sta=0,end=array.length-1;sta<end;sta++,end--){
                        char temp = array[sta];
                        array[sta] = array[end];
                        array[end] = temp;
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 周世阳 于 2012-8-10 14:15 编辑

char[]里没有重写toString()方法,所以调用toString()方法的时候调用的是超类Object的toString()方法,而Object的toString()方法打印的是对象的地址
String.valueof(char[] data)方法则是将 “char数组” 转换为字符串然后返回值,所以打印的是char[]的内容

一般情况下如果对象有重写的toString()方法,优先调用toString();
boolean,char,long,int,double,float,char[]类型的使用String.valueof()来转换成字符串

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
周世阳 发表于 2012-8-10 14:11
char[]里默认调用的是Object的toString(),所以是打印的地址
而String.valueof(char[] data)返回的将char[] ...

能说的具体点嘛?
回复 使用道具 举报
黄敏 发表于 2012-8-10 14:12
能说的具体点嘛?

修改了下 你再看看
回复 使用道具 举报
valueOf方法是一个静态方法,使用类调用,参数可以是对象,对象属性或者原始数据类型。
toString()用于对象。
  1. class Test02 {
  2.         
  3.         //实现字符串反转功能
  4.         public static void main(String args[]) {
  5.                 String s = "abcdefg";
  6.                 //字符串转换数组
  7.                 char sh[]= s.toCharArray();
  8.                 //数组反转
  9.                 reverse(sh);
  10.                 // 数组转换字符串,<font color="#ff0000">因为数组本身不是一个对象,所以输出的应该是数组的哈希值,而valueOf方法是一个静态方法,使用类调用,参数可以是对象,对象属性或者原始数据类型。</font>
  11.                 String s1 = sh.toString();//用toString方法  打印出的结果是:[C@18c56d,用valueOf()打印出的结果是:gfedcba,我查看源代码中valueOf方法也是调用toString方法的,按理说我这个代码中用toString方法打印的结果和用valueOf方法应该是一样的啊,怎么就不一样了呢?toString()和valueOf()区别在哪?在实际开发中这两个方法什么时候该用哪个,什么时候不该用哪个?
  12.                 System.out.println(s1);
  13.         }
  14.         public static void reverse(char array[]){
  15.                 for(int sta=0,end=array.length-1;sta<end;sta++,end--){
  16.                         char temp = array[sta];
  17.                         array[sta] = array[end];
  18.                         array[end] = temp;
  19.                 }
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解,char类型的数据中没有toString类型的方法,你不重载就要用它的话,就是继承Object父类中的toString()方法,
toString方法返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())
回复 使用道具 举报
黄敏 中级黑马 2012-8-10 14:45:05
7#
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马