JAVA SE初级语法--基础数据类型详解和使用

简介: JAVA SE初级语法--基础数据类型详解和使用

一.数据类型



JAVA中数据类型主要分为两类:基本数据类型和引用数据类型


1.基本数据类型


基本数据类型包括四类八种

四类为:整型、浮点型、字符型以及布尔型

八种:字节型,短整型,整形,长整型,单精度浮点型,双精度浮点型,字符型,布尔型


1.四类八种


1.整型类包扩字节型,短整型,整型,长整型

字节型:byte 类型,占用一个字节内存 数值范围为 -128-127

短整型:short 类型,占用2个字节内存 数值范围为:-32768-32767

整形: int 类型,占用4个字节内存 数值范围为:-2^31 - (2 ^31-1)

长整型:long 类型,占用8个字节内存 数值范围为:-2^ 63 - (2^63-1)


整形类型默认是int类型,并且是带有符号的


2.浮点型包括单精度浮点型,双精度浮点型


单精度浮点型:float 类型 占用4个字节内存 数值范围为:-2^31 - (2 ^31-1)

双精度浮点型:double 类型 占用8个字节内存 数值范围为 -2^ 63 - (2^63-1)


需要注意的是,浮点型默认为double类型,并且是带有符号的,在使用float类型时,需要做出区别说明


3.字符型


char 类型:占用2个字节内存

需要注意的是,char类型是Unicode字符集,包括了字符,中文,英文,等一些其他语言的文字,因此在JAVA中,char类型的取值范围是无法直接计算出结果的


4.布尔类型


布尔类型占用内存无明确规定,取值只有true或者false

在idea上,可以通过输出每种类型的取值范围大小

通过包装类点引用出MAX_VALUE以及MIN_VALUE


例如:

    //int的包装类为 Interger
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        //long的包装类为 Long
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
        //double的包装类为 Double
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);
        //float的包装类为 Float
        System.out.println(Float.MAX_VALUE);
        System.out.println(Float.MIN_VALUE);
        //short的包装类为 Short
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
        //byte的包装类为 Byte
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);


由于char类型无法直接计算出取值范围大小,但是char类型的包装类同int类型和其他类型都不是类型名首字母大写开头,char类型的包装名为Character


2.引用数据类型


引用数据类型分为三种:类,接口,数组,在本篇幅中对引用数据类型不做介绍


二.变量



我们以及知道了基本的数据类型,那我们该怎么去使用呢?

而数据类型就是用来定义不同种类变量的,最简单的使用就是创建一个某一种类型的变量,那么这里有一个概念,什么叫变量?


顾名思义,变量就是一个在程序中可以改变的变量


1.变量的定义和语法格式


定义变量的语法格式为: 类型名 + 变量名 = 初始值;

在JAVA当中,我们可以尝试创建一些变量,并理解变量例如

public class Test1_0731 {
    public static void main(String[] args) {
        int a = 10;
        char b = 'b';
        double c = 5;
        float d = 1.5f;
        byte e = 10;
        System.out.println("为改变前 " + a);
        a = 20;
        System.out.println("改变后 " + a);
    }
}


运行结果如下:

692216796bf14b2fba38cf61cf57f5ac.png


从上可以看出,a b c d e 都是我们创建的不同类型的变量,并且通过a赋值的改变可以印证变量是程序中可以改变的量


在变量的创建和使用中需要注意的是:

64ce8aaad8ee4c3395b3c7dd2709333f.png


由于byte的取值范围为-127-128之间,因此编译器会直接报错并推荐使用一个更大且合理的类型


2.定义的变量在使用前一定要初始化

1a1d3dff08504c2da5363b0194ff9a32.png

0e04b247846c47f78fc6230f54be5c44.png


由于浮点型数据在创建是默认为double类型,因此定义的float类型存储不下double类型,编译器会自动报错无法使用


正确的定义如下:

a05fe5b3a6024f32b0893770d81cb748.png


2.字符类型


计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文

d491c5aa37214896a4541ca7e834c2db.png


需要注意的是,一个中文占两个字节,因此,一个char类型只能存放一个中文,并且char类型的包装类为Character


3.布尔类型(Boolean)


        boolean a=true;
        System.out.println(a);
        boolean b=false;
        System.out.println(b);


运行结果如下

image.png


需要注意的是

1.boolean 类型的变量只有两种取值, true 表示真, false 表示假

2. Java 的 boolean 类型不存在 1 表示 true, 0 表示 false 这样的用法

3.并且boolean类型无法和其他类型进行转换(详细见如下类型转换)


三.类型转换



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

数据类型小的赋值给数据类型大的时候,编译器会自动进行转换


2.强制类型转换


数据类型大的赋值给数据类型小的时候,不能够自动完成

d04bdd28fd684c3e92e95444c9ea6a1a.png

若想要让b赋值给a,则需要进行处理,即强制类型转换


8e51b775c85548d3a6407dd3ed2767f4.png


需要注意的是:


1.强转会存在一定的风险,比如数据的丢失

f896a0bb2a204733bd246253e58a0804.png

运行结果如下:

fbf2273f3548433285165509fcbcccc6.png


2.强转以后的溢出


short a = 128;
        byte b = (byte) a;
        System.out.println(a);
        System.out.println(b);


那么打印的 a,b分别为多少呢?

short a 显然是128,哪byte b呢?由于b是byte类型,只能存放一个字节的内容也就是八个比特位,而a=128 的补码是 0000 0000 1000 0000,讲a强转为byte类型以后放到b中只能截取前面八位存放,也就是 1000 0000 ,而这个补码对应在byte类型中是-128(此处原、反、补的讲解参考前面文章)


四.类型提升



很多人在这,会和类型转换中的隐式类型转换会混淆

需要区别的是:


隐式类型转换是在赋值时,数据类型小的转为数据类型大的

而类型提升是不同的数据类型互相运算时,数据类型小的会被提升为数据类型大的


观察下面一段代码:

        int a = 100;
        long b = 10;
        b = a;  // a数据类型小,赋值给b时,编译器自动将a转换为long类型
    //err  会报错
        //int c = a + b;  //a是int类型,而b是long类型,
                       // 它两相加时,a会被先提升为long类型,
                       //最后a+b的结果也为long类型,在int类型中存不下
    //将a+b的结果放入a和b中类型大的b的long下可以编译通过
        long d = a + b;


错误代码如下:

4e8fe2f0f45347c380003264dea1ea23.png

对于类型提升,需要注意到,如果进行相关运算时,数据大小不够四个字节的类型,会自动默认提升为int类型在进行计算,若有一个变量超过int类型,则进行相关运算时,以向较大的类型转换


例如:

        byte a = 20;
        byte b = 10;
        byte c = a + b; //编译器会报错


dbe4b0c809f54858bbf5aa1f1b642e0e.png


可以看到byte类型的a+b 在编译时不足四个字节大小,在编译前就被提升为了int类型,存放在byte c 中无法存下,建议存放在int类型中

相关文章
|
26天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
41 1
|
12天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
37 4
|
10天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
24 1
|
25天前
|
存储 Java 关系型数据库
[Java]“不同族”基本数据类型间只能“强转”吗?
本文探讨了不同位二进制表示范围的计算方法,重点分析了Java中int和char类型之间的转换规则,以及float与int类型之间的转换特性。通过具体示例说明了显式和隐式转换的条件和限制。
33 0
[Java]“不同族”基本数据类型间只能“强转”吗?
|
26天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
20 1
|
26天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
20 1
|
24天前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
18 0
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
50 4
|
3月前
|
Java
【Java 第三篇章】注释、数据类型、运算符
【8月更文挑战第2天】 Java支持三种注释:单行(`//`)、多行(`/*...*/`)及文档注释(`/**...*/`)。它定义了八种基本数据类型,包括四种整数类型(`byte`、`short`、`int`、`long`),两种浮点类型(`float`、`double`),一种字符类型(`char`)和一种布尔类型(`boolean`)。数据类型之间可以自动转换或通过强制转换改变,但后者可能导致精度损失。Java中的运算符涵盖算术(如`+`、`-`)、赋值(如`=`)、比较(如`==`)、逻辑(如`&&`)和三目运算符等。例如,算术运算可用于执行基本数学计算,而逻辑运算符用于组合条件判断。
21 1
|
3月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(下)
02 Java基础语法(变量+数据类型+运算符)
28 5