Java中的基本数据类型

Java中的基本数据类型

Java中的数据类型可以分为两种:

基本数据类型

整型 byte short int long

浮点型 float double

字符型 char

布尔型 boolean

引用数据类型

可以说,除了基本类型以外的所有类型都是引用数据类型

主要包括类,接口,数组等

如下图所示

clip_image001[4]

基本数据类型在内存中的分配

基本型别

大小

最小值

最大值

boolean

-----

-----

------

char

16-bit

Unicode 0

Unicode 2^16-1

byte

8-bit

-128

+127

short

16-bit

-2^15

+2^15-1

int

32-bit

-2^31

+2^31-1

long

64-bit

-2^63

+2^63-1

float

32-bit

IEEE754

IEEE754

double

64-bit

IEEE754

IEEE754

注意!:表格里的^代表的是次方

基本数据类型的转换

有两种方式:自动转换和强制转换,通常发生在表达式中或方法的参数传递时。

1 自动转换
具体地讲,当一个较“小”数据与一个较“大”的数据一起运算时,系统将自动将“小”数据转换成“大”数据,再进行运算。而在方法调用时,实际参数较“小”,而被调用的方法的形式参数数据又较“大”时(若有匹配的,当然会直接调用匹配的方法),系统也将自动将“小”数据转换成“大”数据,再进行方法的调用,自然,对于多个同名的重载方法,会转换成最“接近”的“大”数据并进行调用。这些类型由“小”到“大”分别为 (byte,short,char)--int--long--float—double。这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。

例如

byte b=10;

int i=b;(将byte数据向int赋值时,完成了自动转换)

char c=’A’;

int i=c;(这时会将’A’ 对应的ASCII码值赋值给i)

2 强制转换

将“大”数据转换为“小”数据时,你可以使用强制类型转换。

例如:

int n=(int)1.23456;

输出结果为 1
可以想象,这种转换肯定可能会导致溢出或精度的下降。

注意

当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。
byte b=3;

b=(byte)(b*3);//必须声明byte。

带小数的变量默认为double类型。
float f=1.3f;//必须声明f。

基本数据类型的存储

诸如int a = 3; long b = 255L;的形式来定义的,称为自动变量。值得注意的是:自动变量存的是字面值,不是类的实例,即不是类的引用,这里并没有类的存在。如int a = 3;这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可知,生存期可知(这些字面值固定定义在某个程序块里面,程序块退出后,字段值就消失了),出于追求速度的原因,就存在于栈中

另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 假设我们同时定义:
   int a = 3;     int b=3; 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b这个引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。 定义完a与b的值后,再令a = 4;那么,b不会等于4,还是等于3。在编译器内部,遇到时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值