Java 里的基本类型和引用类型
Java 里的数据类型分为 基础数据类型和引用数据类型。
基础数据类型 在 Java 里只有 8 种:
- byte——整型,1 字节;
- short——整型,2 字节;
- int——整型,4 字节;
- long——整型,8 字节;
- float——浮点型,4 字节;
- double——浮点型,8 字节;
- boolean——布尔型,1 字节;
- char——字符型,2 字节。
一个字节等于 8 位。一位(one bite)在计算机里只有 0 或 1 两个值。所以位数就决定了基本数据类型的表数范围。
引用数据类型
引用的数据类型占的地方通常比较大,类型也比较多,而且还一直在增长。
谁都可以创建自己的类型,像标准类型一样使用它。
最常用的引用类型是 String、Scanner 和 Arrays。
记住,大小写敏感的。
基本类型和引用类型的区别:
基本类型真的存放值;
但是引用类型存的是值的引用(在内存里放地址,这个地址指向数据真正的地方)。
引用类型下,数据就可以被呈现为一种复杂的结构,可以包含其他类型的数据作为他们的一部分。
有两种内存空间:堆、栈。
所有的基本类型存在栈里,引用类型的变量存在 heap memory(堆内存)。
我们以最常见的引用类型之一 String 来做一个简单的解释。
如上图,其实是以下代码的说明:
int 声明的 a 和 b 是基本数据类型,在左边的栈里就直接存了他对应的值; 而 String 声明的 java 和 language 都是引用数据类型,在左边的栈里存的是值的引用,也就是值所对应的内存地址:B10,真正的值 “java” 存在堆里的一个地方。 java 和 language 对应的值一样,所以他们共享了堆里同一个真正的值。
如果是用 == 来判断呢? 答案 true,因为 ==比较的是地址。
那什么时候两个一样的字符串,用 == 判断会等于 false呢?
当你用 new 来创建的时候,就相当于告诉程序,要开辟一块新的空间,不要跟之前的去共享了,此时返回的就是 false。
你可能要说,那值本来就是一样的啊,所以说,如果想要比较引用类型对应的值是否相同,要用 equals,就会经过一番处理,然后比较引号里的值是否相同:
1、JAVA中的几种基本类型,各占用多少字节?
1、Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,-共有8种基本类型,其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
2、整型用于表示没有小数部分的数值,它允许是负数。在一般情况下,int 类型最常用。但如果表示星球上的居住人数,就需要使用long类型了。byte和short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
3、传输存储用short还行,计算处理还是用int吧,大部分CPU指令都是针对32位的int类型的,所以比如CPU要将两个short相加,首先要把short当成int用,然后加完了又要将结果转换为short类型,其实Java本身就是这样规定的,称为自动类型提升机制,像byte char short类型进行大部分运算(如+ – * / >>等)时,都会自动提升为int类型,需要你自己将结果转换回去。
4、在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。由于Java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
5、double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float 类型的精度很难满足需求。实际上,只有很少的情况适合使用float类型,例如,需要单精度数据的库,或者需要存储大量数据。
下面是用于表示溢出和出错情况的三个特殊的浮点数值:
●正无穷大
●负无穷大
●NaN (不是一个数字)
例如,一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
6、整型值和布尔值之间不能进行转化
详解 Java 的八大基本类型,写得非常好
原文:https://dev.to/renegadecoder94/the-8-primitive-types-in-java-10cl
作者:Jeremy Grifski,译者:弯月,责编:郭芮
出品:CSDN(ID:CSDNnews)
自从Java发布以来,基本数据类型就是Java语言中重要的一部分,本文就来详细介绍下每种基本类型的具体使用方法和限制。
几年前,我开始编写了一系列有关Java入门的文章,我觉得有必要将其中一些非常细节的内容单独拿出来写成文章。这样,那些入门内容就更容易理解了。首先,我来介绍一下有关Java 8中的基本类型。
如题所述,Java语言本身有8种基本类型。在下面几节中,就让我们一起来看看这8种基本类型。我将针对每种基本类型,介绍具体的使用方法和限制。
int基本类型
首先,Java的整数是32位有符号(即包括正值和负值)整数,由int关键字表示:
当然,像所有基本类型一样,整型有自己的限制。由于它只有32位,所以其取值范围为-2147483648到2147483647。这数字很大嘛!当然,我们可以在DrJava的交互面板中用下述技巧来确认:
自然地,对于简单的计算而言,int是最常用的整数类型。如果你需要更大的数字范围,请参照下面的long。
double基本类型
与int不同,Java的双精度类型是64位浮点数,由double关键字表示:
需要提醒的是,浮点数实际上就是实数。换句话说,双精度浮点数中包含小数点。由于双精度类型是64位,它能表示的数字要比整型多很多。同样,我们可以利用交互面板来确认双精度类型的范围:
需要注意的是,负的指数表示的是非常小的数字,而不是非常大的负数。所以这里的取值范围跟整数不是完全一样。一般而言,double是在Java中使用浮点数的默认选择。另一个选择是float。
char基本类型
我们已经看到,Java的字符类型表示16位字符,由char关键字表示:
Java中所有的字符都用单引号表示。同时,双引号用来表示字符串。我们稍后会讨论字符串。与往常一样,我们可以通过下面的代码找出字符的范围:
为了让这个范围有意义,我们可以将结果转换成整数(稍后会更多地介绍):
可见,char类型是Java中唯一的无符号类型。换句话说,字符的取值范围为0到65535,每个值映射到特定的字符。如果需要创建该范围之外的字符,可以将一对字符组合起来。
参见“在Java中反转字符串”(https://therenegadecoder.com/code/reverse-a-string-in-java/)这篇文章中的例子。
byte基本类型
当我们讨论二进制时,我们讨论的实际上是比特的概念。而8个比特组成一个字节,字节是Java支持的基本类型之一。本质上,byte类型只不过是取值范围为-128到127的8位整数。
可以猜到,字节由byte关键字表示:
同样,可以利用下面的代码片段来确认byte类型的取值范围:
根据我的经验,byte类型在读取和处理原始数据时非常有用。但是一般而言,我们不会使用它,因为取值范围太小了。
short基本类型
short是另一种整数类型,但它占用的空间要比int类型更小。实际上,它的占用空间正好是int类型的一半,为16位,由short关键字表示:
short类型的取值范围也只有整数的一半,我们可以用下述代码确认:
在实际应用中,short只有65546个可能的值。在内存空间和磁盘空间受限的情况下,我们会使用byte和short。但在其他情况下,在定义整数时默认使用int更为安全。
long基本类型
与short相反的是long基本类型,即长整数。该类型用来表示比int类型还要大的非常大的数。long类型是64位有符号整数,其取值范围超过了10的18次方。通常,长整数用long关键字表示:
下面的代码可以查看64位值究竟有多大:
也许,long可以用来计算光在一定时间内走过的距离。光在一秒内大约传播30万千米。如果编写一个程序来跟踪光走过的距离,那么7秒后int类型就超出范围类,而long类型能够计算大约975年。
不相信吗?可以看看这个gist
(https://gist.github.com/jrg94/820d3f0f482dd19f0170964346381df0)中的计算。
float基本类型
虽然我们通常使用64位浮点数类型double,但Java还支持另一种浮点数类型,叫做float。但与int类似,Java默认情况下使用double表示浮点数。不管怎样,我们可以用float来表示32位浮点数类型:
float类型的范围如下:
可见,32位浮点数的范围和精度都要小得多。如果不需要double的精度,同时节省一半的空间,那么可以选择float类型。
boolean基本类型
最后我们来讨论一下boolean类型。定义布尔类型可以使用boolean关键字:
布尔类型有些特殊,不像其他基本类型那样,它们表示的不是数字值。实际上,之前使用的MAX_VALUE和MIN_VALUE技巧在这里不能使用。相反,它表示的是true或false,即真和假。
在此,我不打算详细介绍布尔类型,因为在Java中做任何事情都会涉及到布尔类型。尽管如此,我们通常不会明确地声明布尔类型。相反,许多代码逻辑中的比较操作的结果都是布尔类型。)
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。