谈谈java数据类型

补充:
在计算机内,是用低电位和高电位来表示数据的,只能有两种状态,即0和1.而这样的一个数据单元就是bit,它是计算机中最小的数据单元。
1byte(字节)=8bit

1.前言

Java是一种强类型语言,这意味着我们必须给每一变量申明它的数据类型。在Java中所有的数据类型可分为:基本数据类型和引用数据类型。下面我们就来谈谈它们的特点。
在这里插入图片描述

2.八大基本数据类型

java的基本数据类型一共有八种,其中有四种整型,用来表示整数,两种浮点型,用来表示小数,一种char类型,用来表示Unicode编码的字符单元。还有一种表示真值的布尔类型boolean。
在这里插入图片描述

2.1整型

整型用于表示整数,分为byte,short,int,long,它们存储时需要的空间不同,所以他们可以表示的范围也不同。在不同的应用场景我们需要使用到的类型也不同,例如,我们在表示全球的人口数量时,就不能用int,因为int可以表示的最大值在20亿左右,而全球人口数明显超过了这个值,所以应当使用范围更大的long,而当我们表示0~100之间的整数的时候,我们可以用byte,这样可以为我们的程序节省内存空间。

byte 1字节,表示的范围-2
short 2字节,表示的范围-32768~32767
int 4字节,表示的范围为负2的31次方到正2的31次方减一,约为21亿
long 8字节,表示的范围为负2的63次方到正2的63次方减一

2.2浮点型

浮点型用于表示有小数部分的数值。浮点型分为float和double,double表示的数值的精度是float的两倍,所以又称double为双精度浮点型,而float单位单精度浮点型。float类型的数值后面要加F或f(例如3.13f),否则会被默认认为是double类型,当然double类型的数值也可以加D或d。

float 4字节 ,可以表示大约3.4E+39(有效数字6到7位)
double 8字节,可以表示大约1.8E+308(有效数字为15位)

2.3char类型

char类型用于原本用于表示单个字符,不过现在随着全球化的推进,越来越多的字符被加入到字符集中,有时候我们可能需要用两个char值来表示一个不常用的字符。为了平时使用时我们尽量不需要考虑这个问题,我们可以尽量避免使用char类型。

char类型表示的是一个单个Unicode字符的编码值,例如‘a’的编码值是97对应的字符,可表示的的范围是\u0000~\Uffff。想详细了解char类型的,建议先去了解一下Unicode字符集,UTF-16编码。

2.4boolean类型

布尔类型只有两个值:false和true,用来表示逻辑判断的是或否。

3.引用类型

Java号称万物皆对象,除了刚刚介绍的八大基本类型,其余的全是引用类型,即我们所说的对象,每个对象可以拥有属于自己的属性,方法。。。可以说对于Java语言的运用离不开对象。除Object自身外,Java中的所有对象都是继承自Object的。

4.对象包装器与自动装箱

有时我们需要将int这样的基本数据类型转换成对象。所有的基本类型都有一个与之对应的类,Integer对应的基本类型为int,这样的类称为包装类(Byte,Short,Integer,Long,Float,Double,Character,Boolean,Void)。
Byte ->byte
Short ->short
Integer ->int
Long ->long
Float ->float
Double ->double
Character ->char
Boolean ->boolean

4.1自动装箱和自动拆箱

试想一下,我们平时有可能遇到只能使用引用类型的情况,而这时我们就需要将基本类型转换成响应的包装类对象。
自动装箱:

List<Integer> list = new ArrayList();
//在这里我们就不能使用int,只能使用Integer
//那我们每次操作都需要使用list.add(Integer.valueOf(1));
//这样未免也太麻烦,幸运的是Java有自动装箱机制
//当我们使用如下代码,
//java会自动装箱为list.add(Integer.valueOf(1));这就是java的自动装箱
list.add(1);

自动拆箱:

Integer n = 1;
        n++;
        //这里进行了自动装箱和自动拆箱,我们来讲讲这里的自动拆箱
        //n是Integer类型的对象,是不可以进行++操作的
        //所以编译器会自动将n++拆箱为
        //n.intValue()++;
4.2不可变的包装类

我们每个包装器类是不可变的,我们构造一个包装器类的对象,它的值都是不可变的,下面给大家举例:

Integer num = 1;
num = 2;

也许有人会问,这个值不是改变了吗,怎么能说它的值是不可变的呢?
实际上这里进行了自动装箱,编译器把它变成了
Integer num = Integer.valueOf(1);
num = Integer.valueOf(2);
我们再看一下valueOf这个方法的源码
在这里插入图片描述
最终我们还是new 了一个新对象,所以这里num=2,其实是有创建了一个新对象,num的值指向了这个新对象,多以包装类对象的值是没有改变的。
Integer类value属性是被final修饰的,也就是说不可变的。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值