【剧前爆米花--爪哇岛寻宝】Java中字面常量、数据类型以及变量相关知识的分类梳理和一些小知识点

目录

数据类型

基本数据类型

引用数据类型

字面常量

变量

整型变量

整型变量

长整型变量

短整型变量

字节变量

浮点型变量

双精度浮点型

单精度浮点型

字符型变量

布尔型变量

类型转换

自动类型转换(隐式)

强制类型转换(显式)

类型提升


大家好!这里是困了电视剧!今天我们来对java中较为基础的知识进行一个简单的梳理。正所谓,千里之行,始于足下。打好基本功是一件很重要的事,话不多说,让我们开始吧!

数据类型

java中的数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。至于为什么会分成这两类,与java对内存的划分有关,我会在我后面的博客中为大家详细的讲解。

基本数据类型

基本数据类型分为四类:整型、浮点型、字符型以及布尔型。

这四类又可以分为八种,每一种都有各自的定义,我上一张图供大家参考:

引用数据类型

引用数据类型分三种:类、接口、数组,他们之所以被称为引用数据类型主要和他们的分配空间有关,这个我在后面的博客会单独拿出来详细的说明。

字面常量

常量即程序运行期间,固定不变的量称为常量,在一个输出“Hello World”程序中System.Out.println("Hello World"); 语句,不论程序何时运行,输出的都是Hello World,其实"Hello World"就是字面常量。

这里有一个关于字面常量的小知识点:我们都知道整型变量都有一个范围,在Java中当我们直接给一个整型变量赋一个超出他范围的字面常量时,Java就会报错

public class Javabit_Code {
    public static void main(String[] args) {
        int a = Integer.MAX_VALUE;
        System.out.println(a);
        int b = 2147483648;
    }
}

由于int型变量占4个字节,每个字节占8个bit位,所以他的最大值是2的31次方,当我们直接给b赋2147483648(2的31次方+1)时,编译器就会报错:

 这就是Java的安全性!即你可以完全相信Java!

但是,我在测试的时候我又发现了一个问题:

public class Javabit_Code {
    public static void main(String[] args) {
        int a = Integer.MAX_VALUE;
        System.out.println(a);
        int b = 2147483647+1;
        System.out.println(b);
    }
}

我所做的操作仅仅是将2147483648换成2147483647+1,但是这样就不会报错并且b的输出结果会按照补码相关的规则进行输出。

这是什么原因呢?原来在Java中如果给一个变量直接赋一个字面值常量的话,它会进行检查,如果超出了就会报错,所以当我们换成2147483647+1后他就不在是一个字面值常量,所以他不会先检查,他会先计算,根据计算结果用补码的相关规则进行赋值。

变量

整型变量

整型变量根据范围不同可以分为四类:整型变量,长整型变量,短整型变量和字节变量。

整型变量

用int关键字定义的变量,其由四个字节构成。

长整型变量

用long关键字定义的变量,其由八个字节构成。

短整型变量

用short关键字定义的变量,其由两个关键字构成。

字节变量

用byte关键字定义的变量,其由一个字节构成,在整型变量中范围最小。这里面有一个小知识点;

public class Javabit_Code {
    public static void main(String[] args) {
        byte a=50;
        byte b=60;
        byte c=a+b;
    }
}

看这段代码,乍一看好像没什么问题,但编译器却报错了、

 

 这是什么原因呢?原来byte型的变量在进行计算时,会先把byte型变量转换成int型变量,所以a+b计算出来结果是int型不能用byte型的c进行接收。

浮点型变量

双精度浮点型

用double关键字定义的变量。

单精度浮点型

用float关键字定义的变量,在定义float变量时,需要数字后面加一个f,否则编译器会默认为double型变量,进而使程序报错。

字符型变量

Java中字符型变量用两个字节来存储,这就使可以表示的字符的种类变的更多,java中使用Unicode字符集,他包含了所有的ASCII中的所有字符,同时也可以表示其他很多字符。

布尔型变量

用boolean关键字定义的变量,用来表示对错,没有明确规定其内存占用情况。

类型转换

讲到变量类型,那就不得不说类型转换的相关知识了。类型转换主要分为两种,一种是自动类型转换(隐式),一种是强制类型转换(显示)。

自动类型转换(隐式)

自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。

 就比如在这段代码中int型的变量c比byte型的变量a范围更大,所以就可以直接赋值,编译器会自动地帮你进行类型转换。

强制类型转换(显式)

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

注意事项: 1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型

2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失

3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

4. 强制类型转换不一定能成功,不相干的类型不能互相转换

类型提升

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

当各种类型的一堆数据进行运算时,编译器会将范围小的提升成范围大的以达到方便运算的目的,同时由于计算机的CPU都是按四个字节进行读写的,所以在面对大小小于四个字节的类型变量时,比如byte型和short型会将他们提升至四个字节进行运算,其结果自然是四个字节。

好了,以上就是关于类型相关的知识,虽然知识较为基础,但将它们整理出来也是对日后的学习有很大的好处的,如有疏漏还请各位大佬指出!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值