Java的long和bigint長(zhǎng)度對(duì)比詳解
Java 中Long的值大小比較
java.util.Lang 對(duì)象吧,而不是基本類(lèi)型 long (注意大小寫(xiě))
Java中如果使用 == 雙等于比較對(duì)象,等于比較的是兩個(gè)對(duì)象的內(nèi)存地址,也就是比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象
如果比較兩個(gè)Long對(duì)象值是否相等,則不可以使用雙等號(hào)進(jìn)行比較,可以采用如下方式:
1. 使用 equals 方法
Long a = new Long(3); Long b = new Long(3); System.out.println(a.equals(b));
2. 使用 Long 類(lèi)型中的 longValue() 方法進(jìn)行比較,如
Long a = new Long(3); Long b = new Long(3); System.out.println(a.longValue()==b.longValue());
因?yàn)長(zhǎng)ong為long的封裝對(duì)象類(lèi)型,因此比較大小的時(shí)候不能用'=='
用java數(shù)組實(shí)現(xiàn)BigInt超大整數(shù)設(shè)計(jì)
package com.test;
import org.apache.commons.lang.StringUtils;
/**
* @author jsczxy2
*
*/
public class BigInt {
public static void main(String[] args) {
BigInt a = new BigInt("367892732043217489143432876442367892732043217489143432876442367892732043217489143432876442367892732043217489143432876442");
BigInt b = new BigInt("3678927329999999999999994328736789273299999999999999943287367892732043217489143432876442367892732043217489143432876442");
System.out.println(a.toString());
System.out.println(b.toString());
System.out.println(a.add(b));
}
private int[] arrayint = new int[100];
public BigInt(String num) {
//分解數(shù)字到int數(shù)組中
splitNumToArray(num);
}
public void splitNumToArray(String num) {
int j = 0;
StringBuffer sb = new StringBuffer();
//數(shù)字全部翻轉(zhuǎn)后分組截取后再翻轉(zhuǎn)回來(lái)加入int數(shù)組,這里控制數(shù)組中每一個(gè)int元素恒定為8位不超過(guò)int最大長(zhǎng)度
num = new StringBuffer(num).reverse().toString();
for (int i = 0; i <num.length(); i++) {
if (i % 8 == 0) {
if (sb != null && !sb.toString().equals("")){
arrayint[j] = Integer.valueOf(sb.reverse().toString());
j++;
sb = new StringBuffer();
}
}
sb.append(num.charAt(i));
}
if (sb != null) {
arrayint[j] = Integer.valueOf(sb.reverse().toString());
}
}
//數(shù)組從后開(kāi)始打印數(shù)字,不滿8位補(bǔ)齊8位數(shù)字用0進(jìn)行左填充
public String printArray(int[] array) {
StringBuffer sb = new StringBuffer();
boolean isNotFirstInt = false;
for (int i = array.length-1; i >=0 ; i--) {
if (array[i] != 0) {
System.out.println(i+":"+array[i]);
if(isNotFirstInt && String.valueOf(array[i]).length()<8){
sb.append(StringUtils.leftPad(String.valueOf(array[i]), 8,"0"));
}else{
sb.append(array[i]);
if(!isNotFirstInt)
isNotFirstInt = true;
}
}
}
return sb.toString();
}
//BigInt數(shù)字進(jìn)行加法運(yùn)算
public String add(BigInt bigInt) {
int[] a = this.arrayint;
int[] b = bigInt.arrayint;
int[] result = new int[100];
//根據(jù)各種情況進(jìn)行結(jié)果賦值
for(int i=0;i<a.length;i++){
if(a[i]==0&&b[i]!=0){
result[i]=b[i];
}else if(a[i]!=0&&b[i]==0){
result[i]=a[i];
}else if(a[i]!=0&&b[i]!=0){
result[i]=a[i]+b[i];
}else{
result[i]=0;
}
}
//處理結(jié)果數(shù)組中超過(guò)8位的int元素的進(jìn)位,該int元素截掉1位后再把其后一個(gè)元素值加一
for(int i=0;i<result.length;i++){
if(String.valueOf(result[i]).length()>8){
result[i] = Integer.valueOf(String.valueOf(result[i]).substring(1));
result[i+1] = result[i+1] + 1;
}
}
return printArray(result);
}
//打印BigInt數(shù)字
@Override
public String toString() {
return printArray(arrayint);
}
}
bigint
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字)。存儲(chǔ)大小為 8 個(gè)字節(jié)。
int
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。存儲(chǔ)大小為 4 個(gè)字節(jié)。int 的 SQL-92 同義字為 integer。
smallint
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數(shù)據(jù)。存儲(chǔ)大小為 2 個(gè)字節(jié)。
tinyint
從 0 到 255 的整型數(shù)據(jù)。存儲(chǔ)大小為 1 字節(jié)。
說(shuō)明:
int(M) 在 integer 數(shù)據(jù)類(lèi)型中,M 表示最大顯示寬度,只用于在顯示,并不影響存儲(chǔ)。在 int(M) 中,M 的值跟 int(M) 所占多少存儲(chǔ)空間并無(wú)任何關(guān)系。和數(shù)字位數(shù)也無(wú)關(guān)系 int(3)、int(4)、int(8) 在磁盤(pán)上都是占用 4 btyes 的存儲(chǔ)空間。
相關(guān)文章
關(guān)于JAVA_HOME路徑修改之后JDK的版本依然不更改的解決辦法
springboot 獲取訪問(wèn)接口的請(qǐng)求的IP地址的實(shí)現(xiàn)

