java基本数据类型与引用数据类型详解

  在java中类型可以分为两大类:值类型和引用类型。

  值类型就是基本数据类型,包含8种,如下所示:

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false

  引用类型:类型分3种:类,接口,数组;

Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

上述所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失), 基本的变量类型只有一块存储空间(分配在stack中), 而引用类型有两块存储空间(一块在stack中,一块在heap中),

引用也是一种数据类型,需要一定的内存空间(stack,栈空间)来保存。但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置

比如 int[] a = new int[]{1,2,3};

int[] a为引用,需要一定的内存空间,即栈来存储但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置,即new int[]{1,2,3}放在堆中不同的引用可能指向同一对象

JAVA变量的默认初始化在Java基本类型在使用字面量赋值的时候,有几个简单的特性如下:

1】当整数类型的数据使用字面量赋值的时候,默认值为int类型,就是直接使用0或者其他数字的时候,值的类型为int类型,所以当使用  long a = 0这种赋值方式的时候,JVM内部存在数据转换。

2】浮点类型的数据使用字面量赋值的时候,默认值为double类型,就是当字面两出现的时候,JVM会使用double类型的数据类型。

3】从JDK 5.0开始,Java里面出现了自动拆箱解箱的操作,基于这点需要做一定的说明:

对应原始的数据类型,每种数据类型都存在一个引用类型的封装类,分别为Boolean、Short、Float、Double、Byte、Int、  Long、Character,这些类型都是内置的封装类,这些封装类(Wrapper)提供了很直观的方法,针对封装类需要说明的是,每种封装类都有一个xxxValue()的方法,通过这种方法可以把它引用的对象里面的值转化成为基本变量的值,不仅仅如此,每个封装类都还存在一个valueOf(String)的方法直接把字符串对象转换为相应的简单类型。

 在JDK 5.0之前,没有存在自动拆解箱的操作,即Auto Box操作,所以在这之前是不能使用以下方式的赋值代码的:Integer a = 0;//这种赋值方式不能够在JDK 1.4以及以下的JDK编译器中通过,但是JDK 5.0出现了自动拆解箱的操作,所以在JDK 5.0以上的编译器中,以上的代码是可以通过的

引用数据类型:

数组

String:字符串型,用于存储一串字符

Java变量声明及使用:

数据类型变量名 =值、表达式;

例:String name = "柯南";

    int a= 50;

注:“=”并不是数学中的“等号”,而是一个赋值运算符

Java变量命名规则:

1:必须以字母、下划线“_”、或“$”符号开头

2:可以包括数字、区分大小写

3:不能使用Java语言的关键字,例如int、class、public等

Java中的六种运算符:

·   算术运算符

·   赋值运算符

·   关系运算符

·   逻辑运算符

·   位运算符

·    三元运算符

 

算术运算符:

+:加法运算,求操作数的和

-:减法运算,求操作数的差

*:乘法运算,求操作数的乘积

/:除法运算,求操作数的商

%:求余运算,求操作数相除的余数

++:自增,操作数自加1

--:自减,操作数自减1

 

赋值运算符:

=:将右边的值赋给左边,例:int a = 1;

+=:左右两边的和相加赋给左边,例:int a = 1; a+=2;结果a的值为3

-=:左边减去右边的差赋给左边,例:int a =5;a-=2;结果a的值为3

*=:两边数值相乘的值赋给左边,例:int a = 2;a*=2;结果a的值为4

/=:左边除以右边的值赋给左边,例:int a = 6;a/=2;结果a的值为3

%=:左边除以右边的余数赋给左边,例:int a =7;a%=2;结果a的值为1

 

关系运算符

>:大于,例:int a = 1;int b = 2;System.out.print(a > b);其结果为false

<:小于,例:int a = 1;int b = 2;System.out.print(a < b);其结果为true

>=:大于等于,例:int a = 1;int b = 2;System.out.print(a >= b);其结果为false

<=:小于等于,例:int a = 1;int b = 2;System.out.print(a <= b);其结果为true

==:等于,例:int a = 1;int b = 2;System.out.print(a == b);其结果为false

!=:不等于,例:int a = 1;int b = 2;System.out.print(a != b);其结果为true

  其结果都是boolean类型,即要么是true要么是false

 

逻辑运算符

&&:与、并且(短路),    两个条件同时为真时,结果为真

||:或、或者(短路),    两个条件有一个为真时,结果即为真

!:非,(!+条件)  条件为真时,结果为假

 

Java中的数据类型转换

1:自动数据类型转换(放大转换)

满足自动数据类型转换条件:

1)两种类型要兼容:如数值类型(整型和浮点型)

2)目标类型大于源类型:例如int型数据可以自动转换为double类型

 

 

2:强制数据类型转换(缩小转换)

在变量前加上括号,在括号中指定要强制转换的类型

例:double a = 40.9;

    int b= (int)a;

注:强制转换会损失数值精度,例如double类型变量a,经强制转换为int类型后值变为40

 

posted on 2018-06-21 16:53  我想静静_zjf  阅读(240)  评论(0编辑  收藏  举报

导航