JAVA基础篇---数据类型(面试)

文章目录

    • 数据类型
      • 基本数据类型
      • 引用数据类型
      • 包装类

数据类型

基本数据类型

  • 八大基本数据类型(对应包装类)
整数型 整数型 整数型 整数型 浮点型(单精度) 浮点型(双精度) 字符类型 布尔类型
byte short int long float double char boolean
1字节 2字节 4字节 8字节 4字节 8字节 2字节 1字节
Byte Short Integer Long Float Double Character Boolean

(注)一个字节为8位,在2进制中可以组成2的8次方个数

(1) byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;

(2) short:
short 数据类型是 16 位、有符号的以二进制补码表示的整数;
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
默认值是 0;
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;

(3) int:
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
默认值是 0 ;
一般地整型变量默认为 int 类型;

(4) long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
默认值是 0L;
这种类型主要使用在需要比较大整数的系统上;

(5) float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
float的精度是6位有效数字,取值范围是10的-38次方到10的38次方;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;例子:float f1 = 234.5f。

(6) double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double的精度是15位有效数字,取值范围是10的-308次方到10的308次方;
默认值是 0.0d;
double类型同样不能表示精确的值,如货币;例子:double d1 = 123.4。

(7) boolean:
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。

(8) char:
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
char型变量是用来存储Unicode编码的字符,Unicode编码字符集中包含了汉字,所以char型变量可以存储汉字

引用数据类型

包括:类,接口,数组,枚举,注解

引用数据类型与基本数据类型区别:

  • 基本数据类型:在被创建的时候,在栈上给其划分一块内存空间,将数值直接存储在栈上。
  • 引用数据类型: 在被创建的时候,首先要在栈上给引用分配一块内存,而对象的具体信息存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
  • 一个主函数的流程,都是会先进入栈中,在栈中定义一个变量,如果右面的不是具体的数值,实体就会在堆中new开辟一个内存空间,用来存储指向这个内存的地址。地址一般都是二进制。
String s1 = new String("abc")   创建了几个对象?

两个
1. new String 创建对象,在编译期间不能确定具体的值,所以会在 在在内存中创建的一个地址。
2. abc在常量池,有自己的地址。
== 与 equals区别:
==比较的是两个对象的引用(内存地址)是否相同,也用来比较基本数据类型的变量值是否相同。

equals比较的是内容相等,但是光内容相等不是真的相等,只有hashCode值相等时才是真的相等。

比较两对象完全相等时可以通过重写equals方法,重写equals方法必须重写hashCode方法。

包装类

什么是包装类:
java中的数据类型Int,double等它们不是对象,无法向上转型获取Object提供的方法,而String就可以,因为String是对象。基本数据类型由于这样的特性,无法参与转型,反射,泛型等,为弥补这缺陷,java提出包装类。
java为我们提供了基本数据类型的包装类有两种:
1.对象型包装类,不继承任何其他类。
2.数值型包装类,继承于Number类。
装箱:将基本数据类型封装为包装类对象,利用每一个包装类型的构造方法实现装箱操作。
拆箱:将包装类中包装的基本数据类型取出来。
JDK1.5以后提供自动拆装箱。

自动装箱的内存复用:
自动装箱时,对于Integer var=?,Integer 缓存池的大小默认为 -128~127,如果var指向的对象在-128 到127范围内赋值时,生成的Integer对象是由IntegerCache.cache()方法产生,他会复用对象,cache()方法会将位于该范围产生的Integer对象入池,下次使用时候,直接拿取,不会再创建。

byte->short->int->long->float->double (范围从小到大)
隐式转换:小范围自动转换大范围

 byte i = 0;        
 int a =i;        
 long b = i;        
 float c =b;        
 double d =c;        
 short j =i;

强制转换:大范围转换小范围

 int i=99;        
 byte b=(byte)i;       
 char c=(char)i;        
 float f=i;        
 double d = f;       
 f =(float) d;

货币包装类型:BigDecimal
JAVA在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算

你可能感兴趣的:(JAVA基础篇---数据类型(面试))