Đó là bởi vì BigInteger
là không, trên thực tế, mọi thứ gần để trở thành nguyên thủy. Nó được thực hiện bằng cách sử dụng một mảng và một số trường bổ sung, và các hoạt động khác nhau bao gồm các hoạt động phức tạp. Ví dụ, đây là việc thực hiện add
:
public BigInteger add(BigInteger val) {
if (val.signum == 0)
return this;
if (signum == 0)
return val;
if (val.signum == signum)
return new BigInteger(add(mag, val.mag), signum);
int cmp = compareMagnitude(val);
if (cmp == 0)
return ZERO;
int[] resultMag = (cmp > 0 ? subtract(mag, val.mag)
: subtract(val.mag, mag));
resultMag = trustedStripLeadingZeroInts(resultMag);
return new BigInteger(resultMag, cmp == signum ? 1 : -1);
}
Primitives trong Java là loại mà thường được thực hiện trực tiếp bởi CPU của máy chủ. Ví dụ: mọi máy tính hiện đại đều có hướng dẫn bằng ngôn ngữ máy để thêm vào số nguyên. Do đó nó cũng có thể có mã byte rất đơn giản trong JVM.
Một loại phức tạp như BigInteger
thường không thể được xử lý theo cách đó và không thể dịch thành mã byte đơn giản. Nó không thể là nguyên thủy.
Vì vậy, câu hỏi của bạn có thể là "Tại sao không có toán tử quá tải trong Java". Vâng, đó là một phần của triết lý ngôn ngữ.
Và tại sao không tạo ngoại lệ, như cho String
? Bởi vì nó không chỉ là một nhà điều hành đó là ngoại lệ.Bạn cần tạo ngoại lệ cho các toán tử *
, /
, +
, -
, <<
, ^
và cứ tiếp tục như vậy. Và bạn vẫn sẽ có một số hoạt động trong chính đối tượng đó (như pow
không được đại diện bởi một toán tử trong Java), mà đối với các nguyên thủy được xử lý bởi các lớp đặc biệt (như Math
).
Câu hỏi này có thể phù hợp hơn với trang [lập trình viên] (http://programmers.stackexchange.com/). – GoBusto
Câu hỏi của bạn tóm tắt thành * tại sao Java không hỗ trợ quá tải toán tử? * Đang đặt câu hỏi về thiết kế Java hiện tại, mà chúng tôi có thể hoặc không biết câu trả lời chính xác. –
Nguyên thủy là các biến mà CPU có hỗ trợ để hoạt động trực tiếp, với 'BigInteger' không phải như vậy. Đây là một lớp hỗ trợ hoạt động với số lớn (thực sự lớn nếu bạn phải), và các hoạt động như vậy yêu cầu quản lý nhiều hơn đáng kể. Bởi vì một lớp của nó và vì Java không hỗ trợ quá tải toán tử, bạn được yêu cầu sử dụng các phương thức của nó thay vì các toán tử số học đơn giản mà bạn sử dụng với các nguyên thủy. – Havenard