You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中字节数组转字符串为何两次输出均为PANKAJ?

为什么Java中字节数组转字符串的实际输出与预期不一致?

你遇到的问题核心是对Java中String类的字节数组构造方法的作用理解有误,咱们一步步拆解来看:

首先看你的代码示例:

package com.journaldev.util;

public class ByteArrayToString {
    public static void main(String[] args) {
        byte[] byteArray = { 'P', 'A', 'N', 'K', 'A', 'J' };
        byte[] byteArray1 = { 80, 65, 78, 75, 65, 74 };
        
        String str = new String(byteArray);
        String str1 = new String(byteArray1);
        
        System.out.println(str);
        System.out.println(str1);
    }
}

实际输出:

PANKAJ
PANKAJ

你的预期输出:

PANKAJ
806578756574


原因解析:

Java的new String(byte[])构造方法的核心作用是将字节数组按照指定的字符编码(默认是平台的默认字符编码,这里是ASCII)解码成对应的字符序列,而不是把每个字节的数值直接转换成字符串拼接。

  • 对于byteArray,你直接用字符初始化字节数组,字符'P'对应的ASCII编码就是80,所以它和byteArray1里的数值是完全等价的;
  • 当你把byteArray1传给String构造方法时,每个字节(比如80)会被解析成ASCII编码对应的字符'P',而不是把数字80当成字符串"80"来拼接。

实现预期输出的解决方案:

如果你想得到数字拼接的结果,可以通过遍历字节数组,逐个将字节的数值转换为字符串后拼接,代码示例如下:

package com.journaldev.util;

public class ByteArrayToString {
    public static void main(String[] args) {
        byte[] byteArray = { 'P', 'A', 'N', 'K', 'A', 'J' };
        byte[] byteArray1 = { 80, 65, 78, 75, 65, 74 };
        
        String str = new String(byteArray);
        // 处理byteArray1得到数字拼接字符串
        StringBuilder sb = new StringBuilder();
        for (byte b : byteArray1) {
            sb.append(b);
        }
        String str1 = sb.toString();
        
        System.out.println(str);
        System.out.println(str1);
    }
}

这段代码运行后,就会输出你预期的结果:

PANKAJ
806578756574

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:29