首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 位元組陣列比較:正確遍歷與比較單一位元組值

     編輯:程式設計綜合問答

錯誤代碼分析

byte[] byte1 = {0,0,0,0,0,0,0,0}; // 長度 8
public void getCommand(byte[] bytes) {
    for(int j=0; j

問題:

  1. bytes[j] 是 byte (基本型別),byte1 是 byte[] (陣列參考)。**基本型別不能與陣列比較**,編譯器會報錯 incomparable types: byte and byte[]。
  2. 即使改成 byte1[j],若 bytes.length > 8 會拋出 ArrayIndexOutOfBoundsException。

正確寫法:逐元素比較

情境 A:比較兩個陣列對應索引的值

public void compareArrays(byte[] bytes, byte[] target) {
    int len = Math.min(bytes.length, target.length);
    for (int j = 0; j < len; j++) {
        // byte 提升為 int 比較,結果為 boolean
        System.out.println("Index " + j + ": " + (bytes[j] == target[j]));
    }
    if (bytes.length != target.length) {
        System.out.println("警告:陣列長度不一致,僅比較前 " + len + " 個元素。");
    }
}

情境 B:檢查陣列中是否包含某個特定 byte 值 (如題目「定義一個 byte 跟 9 個每個比較」)

public void compareWithSingleValue(byte[] bytes, byte targetValue) {
    for (int j = 0; j < bytes.length; j++) {
        if (bytes[j] == targetValue) {
            System.out.println("索引 " + j + " 符合目標值: " + targetValue);
        }
    }
}

// 呼叫範例
byte[] data = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
byte checkVal = 0x05;
compareWithSingleValue(data, checkVal); // 輸出:索引 4 符合目標值: 5

情境 C:判斷兩個陣列內容是否完全相等 (工具類最佳實踐)

import java.util.Arrays;

public boolean areArraysEqual(byte[] a, byte[] b) {
    return Arrays.equals(a, b); // 內部處理長度檢查、逐元素比較、null 安全
}

補充:位元運算與有號/無號陷阱

Java byte 是**有號** (-128 ~ 127)。若處理協議數據 (如 0xFF = 255),直接列印或比較可能困惑:

byte b = (byte) 0xFF; // -1
System.out.println(b); // -1
System.out.println(b == (byte)0xFF); // true (比較位模式)
// 若要當無號 0~255 處理:
int unsignedVal = b & 0xFF; // 255
System.out.println(unsignedVal == 255); // true

總結

  • **單一值比較**:bytes[i] == targetByte。
  • **陣列對應比較**:bytes[i] == targetArray[i] (注意長度)。
  • **整體相等**:Arrays.equals(arr1, arr2)。
  • 切記 Java byte 有號特性,跨語言協議開發常用 & 0xFF 轉無號 int。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved