【Java从入门到精通】第三篇:#Java的数据类型与变量

本文详细介绍了Java中的数据类型和变量,包括字面常量的分类(字符串、整型、浮点型、字符型、布尔型和空常量),基本数据类型的特点(如整型、浮点型、字符型、布尔型的范围和字节数),以及变量的声明与赋值。此外,还讨论了类型转换、类型提升和字符串类型的操作。内容适合Java初学者参考。
摘要由CSDN通过智能技术生成

前言:我们应该都学过了c语言程序设计,其实Java的数据类型和变量与c语言程序设计是差不多的,也有一些不同,我就这里讲述我所了解到的差异,如果有一些地方没讲到的,可以评论区告诉我,我也可以学习学习;如果有讲错的,也可以评论区告诉我,我立马改正,谢谢!!!

1,字面常量

什么是字面常量呢?举一个最简单的例子,在上一篇中写的HelloWorld程序中,System.out.println("hello world")语句,不论何时运行,输出的都是“hello world”,这里的“hello world”就是字面常量。

常量即程序运行期间,固定不变的量。(以下我给你们举一些例子)               

                                                      

 在以上的结果中,我们可以看到,无论是整型还是浮点型等等,这里输出的就叫做字面常量。

字面常量的分类:            

(1),字符串常量:由""括起来的,比如"hello"、"123"、"你好"。

(2),整型常量:程序中直接写的数字(注意没有小数点),如:10、140

(3),浮点数常量:程序中直接写小数的,如:3.14、9.58、0.56

(4),字符常量:由''括起来的单个字符,如:'A'、'5'

(5),布尔常量:这里的布尔常量只有两种,不是true就是false,与c中的不同的是不可以写成1/0

(6),空常量:null(与c语言中的NULL有所不同,在这里就不详细讲了)

注意:字符串、整型、浮点型、字符型以及布尔型,在Java中都被称为数据类型

2,数据类型 

(1) Java中数据类型主要分为两类:基本数据类型和引用数据类型(下图是做一个简单的概括)

 基本数据类型和引用数据类型的区别:基本数据类型里面存的是简单的数值,引用数据类型则存的是地址。

(2)基本数据类型中八种类型有什么不同呢?下面这张图可以观察出。

 注意:1,我们可以看出不论是32位系统还是64位系统的(程序可移植性很强),int都占用4个字                   节,long都占用8个字节。

           2,整型和浮点型都是带有符号的。

           3,整型默认为int型,浮点型默认为double型。

           4,字符串属于引用类型,占用2个字节。

3,变量

在程序中,除了有始终不变的常量外,也有一些内容是可能会经常改变的,对于这种经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类的变量的。包括有局部变量(方法内部的变量)和成员变量(类和对象中会讲到)

 以上代码就定义了一个整型变量a和一个布尔值flg,a的值是可以改变的,顺便教大家两个快捷键 。

(1)整型变量

以下定义整型变量的方法,有一些细节需要注意的。

 既然讲到整型变量了,就讲详细一点,以下我们来看一下整型变量的范围。

               

                 

 注意:从上面可以看出,我们在定义整型变量的时候不能超过它的范围,否则编译器就会报错;

int的包装类型是Integer(包装类型就是基本数据类型所对应的类类型)(也就是Integer只是int的plu版本),包装类的好处就是可以灵活地进行数据类型处理(如下图)。

(2) 长整型变量

注意:1,long的包装类型就是Long

2,l长整型变量的初始值后加L或l,建议写L

3,长整型不论在哪个系统下都占用8个字节

(3)短整型变量

注意:1,同样,short的包装类型是Short

2,short在任何系统下都占用2个字节 

(4)字节型变量

当对byte进行强制类型转换时,

注意:byte在任何系统下都只占用1个字节

包装类型是Byte

 (5)浮点型

(5.1)双精度浮点型

注意:1,我们可以看到,在第二个打印b/c的时候,输出结果是0,为什么呢?结果不应该是0.5的吗?原因是因为 在Java中,int除以int的值仍然是int(会直接舍弃小数部分),所以这里输出的是0,如果想要得到0.5,则需要用到double型,像上面的d/e,得到的就是0.5

2,看上面最后一个代码,为什么不输出1.21?原因是因为double类型的内存布局遵守IEEE754标准(和c语言的一样),尝试使用有限的内存空间表示可能无限的小数,势必会存在一定精度误差,因此浮点数是个近似值,并不是精确值。

3,double类型的包装类型是Double

4,double类型在任何系统下都是占用8个字节

(5.2)单精度浮点型

看到这个代码,你可能会有疑惑,什么时候用double型?什么时候会用float型?

在我看来,这两者都差不多,只是double的范围相对于float的大一点。float类型在Java中占4个字节,同样遵守IEEE754标准,由于表示的数据精度范围较小,一般在工程上用到的浮点数优先考虑double,不太推荐使用float。

第二个需要知道的是,float的包装类型是Float。

(6)字符型变量

这里的char与c语言中的char有所不同。

在Java中的字符可以存放整型,计算机中的字符本质上是一个整型,在c语言中使用的是ASCll表示字符,而在Java中使用Unicode表示字符,因此一个字符占用两个字节,表示字符种类更多,包括中文。

第二个我们需要知道的是,char的包装类型是Character。

(7)布尔型变量

注意:1,在Java中,布尔类型只有2个值,一个是true,一个是false,没有所谓的0是假,非0是真!!!

2,boolean的包装类是Boolean。

3,Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占用1个字节。

4,类型转换

我们来看一下以下的一个代码:

为什么会出现这种情况呢?

因为在Java中,当参与运算的数据类型不一致时,就会进行数据类型转换。Java中数据类型转换主要分为两类:自动类型转换(隐式)和强制类型转换(显式)。上面代码中a和b都是整型,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值。而“a=b”的时候编译器报错,long的范围比int范围大,会有数据丢失,不安全。

(1),自动类型转换(隐式)

自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转换为数据范围大的,就好比如上面的那个代码一样。

(2)强制类型转换(显式)

强制类型转换:当进行操作时代码需要经过一定的格式处理,不能自动完成。特点:数据范围 大的到数据范围小的。

上面举一个代码,就可以一目了然了! 

5,类型提升

类型提升就是不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

这个代码可以很好的理解,a在和b相加时,会先转换成long型。

再看上面这个byte和byte的运算,为什么会出错呢?

原因:由于计算机的CPU通常是按照4个字节为单位从内存中读写数据的。为了硬件上实现方便,像byte和short这种低于4个字节的类型,会先提升为int型,在参与运算。所以编译器在计算a+b的时候,编译器会先将a和b提升为int整型,再进行运算,得到的结果也是int型, 这时赋值给j(j是byte型),就会出错。

正确的写法应该是:

6,字符串类型(String类型先做简单的了解)

在Java中使用String类定义字符串类型,比如:

(1)int型转换为String型 

(2)String型转换为int型

后记:如果上面的文章对你有用或者你觉得有用的,你可以点赞+关注+转发收藏,谢谢您对小博主的支持,我会持续更新的,关注小博主,学习Java不迷路!!谢谢!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱撸猫的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值