Java的long和bigint长度对⽐详解
Java 中Long的值⼤⼩⽐较
java.util.Lang 对象吧,⽽不是基本类型 long  (注意⼤⼩写)
Java中如果使⽤ == 双等于⽐较对象,等于⽐较的是两个对象的内存地址,也就是⽐较两个对象是否是同⼀个对象
如果⽐较两个Long对象值是否相等,则不可以使⽤双等号进⾏⽐较,可以采⽤如下⽅式:
1. 使⽤ equals ⽅法
Long a = new Long(3);
Long b = new Long(3);
System.out.println(a.equals(b));
2. 使⽤ Long 类型中的 longValue() ⽅法进⾏⽐较,如
Long a = new Long(3);
Long b = new Long(3);
System.out.println(a.longValue()==b.longValue());
因为Long为long的封装对象类型,因此⽐较⼤⼩的时候不能⽤'=='
⽤java数组实现BigInt超⼤整数设计
st;
import org.apachemons.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.String());
System.out.String());
System.out.println(a.add(b));
}
private int[] arrayint = new int[100];
public BigInt(String num) {
//分解数字到int数组中
splitNumToArray(num);
}
public void splitNumToArray(String num) {
int j = 0;
StringBuffer sb = new StringBuffer();
//数字全部翻转后分组截取后再翻转回来加⼊int数组,这⾥控制数组中每⼀个int元素恒定为8位不超过int最⼤长度
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.verse().toString());
j++;
sb = new StringBuffer();
}
}
sb.append(num.charAt(i));
}
if (sb != null) {
arrayint[j] = Integer.verse().toString());
}
}
//数组从后开始打印数字,不满8位补齐8位数字⽤0进⾏左填充
long spring是什么意思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;
}
}
}
String();
}
//BigInt数字进⾏加法运算
public String add(BigInt bigInt) {
int[] a = this.arrayint;
int[] b = bigInt.arrayint;
int[] result = new int[100];
//根据各种情况进⾏结果赋值
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;
}
}
/
/处理结果数组中超过8位的int元素的进位,该int元素截掉1位后再把其后⼀个元素值加⼀
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数字
@Override
public String toString() {
return printArray(arrayint);
}
}
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储⼤⼩为 8 个字节。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储⼤⼩为 4 个字节。int 的 SQL-92 同义字为 integer。smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储⼤⼩为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储⼤⼩为 1 字节。
说明:
int(M) 在 integer 数据类型中,M 表⽰最⼤显⽰宽度,只⽤于在显⽰,并不影响存储。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并⽆任何关系。和数字位数也⽆关系 int(3)、int(4)、int(8) 在磁盘上都是占⽤ 4 btyes 的存储空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。