java常规八种基本类型

       最近确实有点忙,但也反思了很多东西,学的东西很多,ssh,设计模式,hadoop等等,什么样的基本都学了,追求学的东西多,但是却也明白了一个道理,盲目的学习并不一定好,当然我也不是说学习这些东西不好,只是我们需要对于基础知识的把我握更加更牢固一点,学了一个东西,必须知道,为什么要选择他,他有什么好处,有什么坏处,我们从中又能够学习到什么,糊里糊涂的还没明白一个东西能够干什么,就开始用,那样就有点多学无益了,这是本人的一些总结,希望能够帮助你,下面,话不多说,我们聊下java的基本类型。

java的基本类型分为四大类,八种,分别是整型,浮点型,逻辑型,字符型

整型:

byte short int long

浮点型

float double

逻辑型

boolean

字符型

char

既然知道java的八种基本类型了,我们不能就只限于基本知道吧。那么我们拿int来聊。

当我们需要一个无穷大的数的时候,我们有的人会这么做:

int a=Integer.MAX_VALU 或者 int a=(int) Math.pow(2, 100);

但是有没有想过,他真的是无穷大呢?

当我们出错的时候,发现a的最大值总是2147483647,即2^31-1,这是为什么呢?明明定义了2^100。

这就需要我们了解到int 默认支持4个字节,每个字节表示8个位,位是二进制的最小单位。

换句话说我们可以把int的最大值表示为0111 1111 1111 1111 1111 1111 1111 1111,16进制表示为:0x7fffffff;

这就是我们所说的2^31-1,那为什么不是2^32-1呢,这就牵扯到二进制位的最高一位为符号位,0代表正数,1代表负数,

那么我们的最小值呢?是多少呢?会是-(2^31-1)么?不少人会这么推测,但是事实却是-2^31,为什么呢?这就牵扯到我们二进制的知识。

负数的二进制一般用补码表示,int的最小值为1000 0000 0000 0000 0000 0000 0000 0000,16进制为0x80000000,

对二进制不熟的人会认为int最小值那不是出了最高a位的符号位外,就是0么,但是我们零的表示为0000 0000 0000 0000 0000 0000 0000 0000。

因此我们可以把他当成一个特殊来对待,即源码和补码一样,所以int的最小值为-2^31,另外我说下二进制的补码怎么求。

正数的补码是他本身,负数的补码是先得出正数的二进制,然后取反,即0变成1,1变为0,在最后一位再加1.

说到这里了,就需要整体来总结一下了。

整型:

byte 1字节 short 2字节 int 4字节 long 8字节 float 4字节 double 8字节 boolean 1字节 char 2字节

取值范围:

byte(-2^7---2^7-1)<pre name="code" class="html"><pre name="code" class="html">short(-2^15---2^15-1)
int(-2^31---2^31-1)<pre name="code" class="html">long(-2^61---2^61-1)




浮点型

float(-2^31---2^31-1)
double(-2^61---2^61-1)

逻辑型

boolean(-2^7---2^7-1)

字符型

char(-2^15---2^15-1)

下面我们说下java和基本类型有关的一些知识。大家都知道java的传递类型包括引用传递和值传递吧,不知道的该面壁了,

那么什么时候是引用传递,什么时候是值传递?下面举个例子:

public void testD(){
    int a=10;
    print(a);
    System.out.println("a:"+a);
}
	
public void print(int a){
    a=100;
}
这个a的输出大家会毫不犹豫的说是10;但是下面的这个呢?

public void testD(){
    int[] a={1,2,3,4,5};
    print(a);
    System.out.println("a:"+a[0]);
}
	
public void print(int[] a){
    a[0]=100;
}

这个的输出貌似就没有那么简单了,可能会有一部分人觉得这个输出是1,实际是100;这就是引用传递和值传递。

那么什么时候是引用传递,什么时候是值传递,一般情况来说,java的基本类型是值传递,其余的是引用传递。

当然也有别人说java只有值传递,不过不妨碍大家理解。

这个又牵扯到jvm的设计了,即常量池,堆和栈,就不一一细说了。就到这里了,希望对我有帮助的对你也有帮助,

助人助己。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值