深入 JAVA里面关于byte数组和String之间的转换问题

简介: 把byte转化成string,必须经过编码。    例如下面一个例子:     importjava.io.UnsupportedEncodingException;   publicclass test{   publicstatic...

把byte转化成string,必须经过编码。 
  例如下面一个例子: 
  

importjava.io.UnsupportedEncodingException; 
  publicclass test{ 
  publicstatic void main(String g[]) { 
  Strings = "12345abcd"; 
  byteb[] = s.getBytes(); 
  Stringt = b.toString(); 
  System.out.println(t); 
  } 
  } 


  输出字符串的结果和字符串s不一样了. 
  经过以下方式转码就可以正确转换了: 
  
publicclass test{ 
  publicstatic void main(String g[]) { 
  Strings = "12345abcd"; 
  byteb[] = s.getBytes(); 
  try{ 
  Stringt = new String(b); 
  System.out.print(t); 
  }catch (Exception e) { 
  e.printStackTrace(); 
  } 
  } 
  } 

 Stringstr = "String"; 
  byte[]byte1 = str.getBytes(); 
  Stringstr1 = new String(byte1); 
  byte[]byte2 = str1.getBytes(); 
  Stringstr2 = new String(byte2); 
  System.out.println("str<<<"+ str); 
  System.out.println("byte1<<<"+ byte1); 
  System.out.println("str1<<<"+ str1); 
  System.out.println("byte2<<<"+ byte2); 
  System.out.println("str2<<<"+ str2); 


 
  ------------------------------------- 
  输出结果 
  str<<<String 
  byte1<<<[B@192d342 
  str1<<<String 
  byte2<<<[B@6b97fd 
  str2<<<String 
  想请教为什么两个byte输出的不一样呢? 
  Stringstr = "String"; 
  byte[]byte1 = str.getBytes(); 
  Stringstr1 = new String(byte1); 
  byte[]byte2 = str1.getBytes(); 
  ---------- 
  注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组 
  他们本身也是两个对象 
  直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode() 
  [B表示byte数组 
  @表示之后的是地址 
  后面跟着的是hashCode,其实就是其虚拟机地址 
  所以这个结果也就是顺理成章了.

目录
相关文章
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
这篇文章区分了Java中的String和StringBuffer类:String是不可变类,一旦创建字符序列就不能改变;而StringBuffer代表可变的字符串,可以通过其方法修改字符序列,最终可以通过`toString()`方法转换为String对象。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
3978 1
|
JavaScript 前端开发
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
这篇文章介绍了JavaScript中的数组、Date对象、Math对象以及包装类(String、Number、Boolean),并详细讲解了数组的创建、方法(如forEach、push、pop、unshift、slice、splice)和遍历操作,以及工厂方法创建对象和原型对象的概念。
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
822 5
|
存储 Go 索引
Golang 中的 String、rune 和 byte
Golang 中的 String、rune 和 byte
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
714 0
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
638 0

热门文章

最新文章