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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 洪灿阳 中级黑马   /  2012-12-19 23:06  /  1842 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                String str="aaaa";
                byte[] by = str.getBytes();
                String s=by.toString();
                System.out.println(s);
                System.out.println(str.equals(s));


求解释为啥s不是“aaaa”??

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 崔政 于 2012-12-19 23:26 编辑

by是数组,你调用byte数组的toString()返回的自然是byte数组的形式。
这和

int [] arr=new int[]{1,2,3,4,5};
System.out.println(arr.toString());
是一个道理


如果你想要aaaa,可以这么做
        String str="aaaa";
        byte[] by = str.getBytes();
        String s=new String(by);
        System.out.println(s);
        System.out.println(str.equals(s));
回复 使用道具 举报
洪灿阳 来自手机 中级黑马 2012-12-19 23:29:04
藤椅
洪灿阳 发表于 2012-12-19 23:06:47
                String str="aaaa";
                byte[] by = str.getBytes();
                Str

了解了,那如何实现字符转字节然后又转回原来的字符呢?来自: Android客户端
回复 使用道具 举报
吼吼  很简单的嘛, 因为你原来是 String str="aaaa",后来你又byte[] by = str.getBytes();把字符串转换成了字节,而   String s=by.toString();这句转换的是字符串,最后System.out.println(str.equals(s));这句话来比较两个对象是否相等,一个是字节,一个是字符,也就是你拿字符"aaaa"和字节a a a a比较能相同吗?呵呵~~这是我的理解,你如果觉得不对 我们可以再一起研究研究。
回复 使用道具 举报
洪灿阳 来自手机 中级黑马 2012-12-19 23:30:02
报纸
崔政 发表于 2012-12-19 23:24:12
by是数组,你调用byte数组的toString()返回的自然是byte数组的形式。
这和

int [] arr=new int[]{1,2,3,4,5};
System.out.print

那如何实现字符转字节又转成原来的字符呢来自: Android客户端
回复 使用道具 举报
洪灿阳 发表于 2012-12-19 23:30
那如何实现字符转字节又转成原来的字符呢

我在沙发中已回复。
回复 使用道具 举报
高境 金牌黑马 2012-12-19 23:36:26
7#
不打印 的是那个字节数组的地址值。
回复 使用道具 举报
洪灿阳 来自手机 中级黑马 2012-12-19 23:40:50
8#
崔政 发表于 2012-12-19 23:24
by是数组,你调用byte数组的toString()返回的自然是byte数组的形式。
这和


嗯嗯,受教了。
回复 使用道具 举报
焦健 高级黑马 2012-12-20 00:08:44
9#
String s是字节数组调用toString方法的返回值,字节数组调用的是Object类中的toString方法,
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。
换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode())
所以打印到控制台上就是字节数组的哈希值,使用Object类的equals方法比较的是地址哈希值,字节数组的地址和字符串的地址不同,所以结果为false;
想要转换回“aaaa”可以使用String的构造方法来完成,当然,你也可以通过复写Object类中的toString方法来实现。
回复 使用道具 举报
楼主你的疑问应该是概念混淆了。
               String str="aaaa";
                byte[] by = str.getBytes();
                String s=by.toString();//这样的使用你得首先知道,字节数组它有没有覆写Object的toString方法,Api中查看,它是没有覆写的,那么它的调用就是调用父类Object的toString方法,查看源码,我们可以知道,它打印的是引用对象在栈内存中的地址值。
  如果你想要打印它的值话话,可以调用String的构造方法:
       String ss=new String(by);这样就可以得到你的需求了;
   
                System.out.println(s);
                System.out.println(str.equals(s));
回复 使用道具 举报
崔政 发表于 2012-12-19 23:24
by是数组,你调用byte数组的toString()返回的自然是byte数组的形式。
这和

你好!问下知道
获取客户端的信息,比如端口,还有上传过来的文件的名称和大小还有文件格式?如何实现吗?用java的方式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马