Java后端知识图谱》JAVA基础》数据类型

目录

  • 一、java中有两大数据类型:内置的基本数据类型;引用数据类型
  • 二、两大数据类型在不同情况下存储的位置
  • 三、基本数据类型之间的类型转换:低级到高级的自动类型转换;高级到低级的强制类型转换
  • 四、引用数据类型之间的类型转换:向上转型、向下转型
  • 五、与基本类型相对应的面向对象包装类:自动装箱,自动拆箱
  • 六、Integer类型,-128 ~ 127 会有缓存,对比Integer对象的值使用==有坑

一、java中有两大数据类型:内置的基本数据类型引用数据类型

1、Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:是8位、有符号的,以二进制补码表示的整数;默认值是 0;

short:short 数据类型是 16 位、有符号的以二进制补码表示的整数;默认值是 0;

int:int 数据类型是32位、有符号的以二进制补码表示的整数;默认值是 0 ;

long:long 数据类型是 64 位、有符号的以二进制补码表示的整数;默认值是 0L;

float:float 数据类型是单精度、32位的浮点数;默认值是 0.0f;

double:double 数据类型是双精度、64 位的浮点数;默认值是 0.0d;

boolean:只有两个取值:true 和 false;默认值是 false;

char:char类型是一个单一的 16 位 Unicode 字符;char 数据类型可以储存任何字符;默认值是'\u0000'

实际上,JAVA中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

2、引用数据类型:引用类型的变量非常类似于C/C++的指针。指向对象的变量是引用变量(该变量存储的是内存地址值,这个内存地址值里面存放的才是我们需要的对象值)。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。接口、类、数组都是引用数据类型。所有引用类型的默认值都是null。

二、基本数据类型、引用数据类型在不同情况下存储的位置

引用变量的值指向的对象都是存放在堆内存中的,但引用变量不一定。

1、局部变量存储位置

在方法中声明的变量,即该变量是局部变量

  • 每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因。
  • 在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量:
  • 1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)都放在JAVA虚拟机栈中
  • 2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中

2、成员变量存储位置
在类中声明的变量是成员变量,也叫全局变量

  • 放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。
  • 同样在类中声明的变量即可是基本类型的变量,也可是引用类型的变量:
  • 1)当声明的是基本类型的变量其变量名及其值都放在堆内存中的
  • 2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象都存储在相应的堆中

3、静态变量存储位置

静态变量其实就是常量

  • 都存储在JVM的方法区中
  • static变量在类加载时被初始化,存储在JVM的方法区中,整个内存中只有一个static变量的拷贝,可以使用类名直接访问,也可以通过类的实例化对象访问,一般不推荐通过实例化对象访问,通俗的讲static变量属于类,不属于对象,任何实例化的对象访问的都是同一个static变量,任何地放都可以通过类名来访问static变量。

三、基本数据类型之间的类型转换:低级到高级的自动类型转换;高级到低级的强制类型转换

1、不能对boolean类型进行类型转换。

2、简单数据类型转换从低级到高级 :(byte,short,char) —> int —> long—> float —> double

3、低级类型变量可以直接转换为高级类型变量,称之为自动类型转换。 byte b; int i=b;

4、对于byte、short、char三种类型而言,它们是平级的,因此不能相互自动转换

5、将高级变量转换为低级变量时,需要使用强制类型转换,int i=99;  byte b=(byte)i;

基本数据类型自动转换的特性容易出问题,多用引用数据类型的包装类

四、引用数据类型之间的类型转换(JAVA多态性之一):向上转型、向下转型

1、向上转型:通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换,使代码更优美抽象。格式:父类类型 变量名 = new 子类类型();

2、向下转型:通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换,较少用,是为了显式调用子类中的方法,向下转型前一定是先向上转型,否则向下转型是会运行报错的。格式:子类类型 变量名 = (子类类型) 父类变量名;

五、与基本类型相对应的面向对象包装类:自动装箱,自动拆箱

Java 提供了 8 种 基本数据类型及对应的 8 种包装数据类型,包装类型正是为了解决基本数据类型无法面向对象编程所提供的。

基本数据类型 包装类型
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

1、自动装箱即自动将基本数据类型转换成包装类型,Integer i3 = 8;

2、自动拆箱即自动将包装类型转换成基本数据类型,int i4 = i3;

在方法接收参数、对象设置参数时都能自动装箱拆箱。

六、Integer类型,-128 ~ 127 会有缓存,对比Integer对象的值使用==有坑

但基本类型int之间数值比较用==是没问题的,所以要多用equals方法,少用==,==是比较变量引用值的,如果是引用类型变量比较的就是指向的对象地址之间的比较。

发布了74 篇原创文章 · 获赞 48 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/wangpeng322/article/details/104223947