【第二章】Java中的数据类型,运算符与程序逻辑控制

【第二章】Java中的数据类型,运算符与程序逻辑控制

上一章我们介绍了JavaSE的历史与Java程序的特点,那么从本章开始,我们就从Java语言的细节入手。从数据类型,运算符和程序逻辑控制三个方面来介绍,这里与C语言的很多内容都相似甚至相同。所以说有些东西在进行记录的时候就一笔带过。下面从数据类型开始。


数据类型

数据类型这一章分为基本数据类型和引用数据类型。基本数据类型就是我们在定义变量的时候可以使用到的数据类型。而引用数据类型则是基于Java语言OOP(Object Oriented Programming)面向对象的特性进行的,后续会在后续《类与对象》这一章中详细记录。

这一部分内容会参考C语言当中的部分语法拓展介绍,详情可以参考这一篇文章:

C语言中的数据类型和变量、常量、操作符概述

基本数据类型

数据类型大致分为四类:整型,浮点型,字符型以及布尔类型。

Java中的基本数据类型共有八种,它们所对应的取值范围、包装类如下图所示:

注:

1.由于Java中JVM的跨平台的特性,内存占用不论在哪个平台上都是不变的

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

3.在不明确指定详细的数据类型的前提下,默认整型为int,而浮点型为double

4.包装类是把基本数据类型转换为引用数据类型的一种方法,具体的使用会在后续的章节讲到。

5.所以类型可以通过包装类名.Max_Value或者Min_Value进行获取当前对应基本数据类型的取值范围

变量

在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等,对于这些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的。

基本的格式如下:

数据类型 变量名=初始值;

这就是我们一般所写的定义格式。对于变量,可以分为成员变量和局部变量。这里我们所探讨的是局部变量,也就是方法内的变量。在进行赋初值的时候我们也可以在定义后赋值,但是必须注意:

变量在使用之前必须要赋初值,否则编译报错

这与C语言如出一辙,这里就不再赘述。

常量(字面量)

介绍完变量以后,我们来了解一下常量。常量就是字面量,在程序运行期间,固定不变的量就是常量。比如说我们所写的1,3.34,'A',"JVG"等的一些数据。这就是常量,它是不可变的。

类型转换与提升

在《C语言的入门与精通》专栏中,我们介绍了C语言具有算术转换与整型提升的特性,那么对应的,Java语言也有这个特性。Java语言在进行数据类型不同的转换的时候,也会有隐式和显示的转换。以下面两个例子为例:

第一个例子:

java 复制代码
public class testDemo1 {
    public static void main(String[] args) {
        byte a=10;
        byte b=30;
        byte c=a+b;
    }
}

在编译时就出现编译错误。

原因在于整型之间进行运算的时候,如果不显示的指定数据类型,那么整型默认是int,而浮点类型默认是double。这里很明显编译器是把byte自动进行了类型的提升,提升为了整型int,如果想要赋值,把接收的变量类型改为int或者对整个式子进行强制类型转换即可。

第二个例子:

java 复制代码
  public static void main(String[] args) {
        int a=100;
        long b=100l;
        b=a;
        a=b;
    }

进行编译的时候,第一行不会报错,而第二行会报错,为什么🤔?

原因就是在Java中,赋值时,大范围的值往小范围的值进行赋值的时候,能够成功赋值,因为数据不会丢失。但是相反则不行,编译器会产生数据类型丢失的警告。

那么上述文章就是数据类型的转换的常见的误区,通过两个例子来展示。

字符串类型

在C语言当中,字符串类型主要以字符串常量和字符数组的方式存在,而在C++中,我们可以使用模版类String来进行对于字符串的修改。那么在Java中,也提供了字符串的使用的方法------String类。

String类是不可变的对象,因为它的底层是一个不可变的字节数组的对象。

这个知识我们会在后面的类与对象章节当中讲到。

在有些情况下,我们需要进行数据与字符串之间的转换,转换的方式主要有以下两种:

1.将数据转换为字符串

java 复制代码
    public static void main(String[] args) {
        int num=10;
        //方法一:字符串化
        String s1=""+num;
        //方法二:调用字符串的API
        String s2=String.valueOf(num);
    }

2.将字符串转换为数据

java 复制代码
    public static void main(String[] args) {
        //调用包装类的方法
        String str="1000";
        int num=Integer.parseInt(str);
        System.out.println(num);
    }

注意:这里如果字符串中包含了非法数据,比如说"1000abc",JVM则会抛出异常。

这就是我们在进行数据转换的时候所采取的方式。那么Java中的数据类型到此结束,下面是Java中的运算符号的介绍。

运算符

运算符除了常规算术运算符的±、*、/、%运算符外,还有关系运算符,逻辑运算符,位运算符。下面介绍一些运算符的注意事项。

算术运算符

基本四则运算

基本四则运算符的算术规则同数学的运算规则,但是也有下面几个问题要注意:

1.如果运算符号两边都是整型发生除法运算时,如果产生小数,则会让小数进行向下取整的操作。

java 复制代码
    public static void main(String[] args) {
        int a=100;
        int b=8;
        System.out.println(a / b);
    }

2.除数不能为0,如果是0,则会抛出ArithmeticException(算数异常)

java 复制代码
    public static void main(String[] args) {
        System.out.println(10/0);
    }

3.%不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

java 复制代码
    public static void main(String[] args) {
        System.out.println(10%2);
        System.out.println(12.5%2);
    }

在C语言中,%运算符并不能够对于小数取模,但是Java里面是可以的,这一点要特别注意。

增量运算符

增量运算符可能听起来比较高大上,其实上就是把两个运算符进行复合了。常见的有+=、-=,*=,/=,%=。其实上就是把算术运算符复合了,比如:

a+=10 的本质就是a=a+10 ,这里与C语言一样,故不再赘述。

但还是有一点需要注意,增量运算符在进行计算的时候,不需要进行强制类型转换。

java 复制代码
    public static void main(String[] args) {
        double a = 10.4;
        int b = 10;
        b += a;
    }

这样写,程序可以编译通过并且正常运行,但是如果写:**a=a+b;**程序自动从小的类型向大的类型转换。

自增/自减运算符

与C语言一样,不再赘述。

逻辑运算符

逻辑运算符有"&&、||、~、&、|" ,其中&&和||与C语言一样,是逻辑上的短路与和短路或。这里就不再赘述,但是&和|也是与运算和或运算,但是不同点在于,他们不会有短路现象。

结合上述代码,就可以很好的印证上述的观点。

位运算符和移位操作符

位运算符与C语言相同,这里不再赘述。

移位操作符

移位操作符上分为左移操作符、右移操作符。而在C语言当中,左移操作符与Java当中一样。而在右移操作符部分。C语言中右移操作符分为算术右移和逻辑右移。

1.算术右移:算术右移在最高位会补充符号位,如果是1就右移后补1,反之则补0,这是gcc、msvc编译器所默认的

2.逻辑右移:逻辑右移在最高位无脑补0

这是我们所确定的C语言当中右移操作符的两种特性,而在Java语言当中,算术右移不变,依然是>>,而逻辑右移在Java中也叫无符号右移,它的格式也被改变了,改为>>>。这就是Java中的无符号右移。

上面所讲的内容是我们在Java当中所需要注意的要点。


程序逻辑控制

Java当中,程序的逻辑与C语言一样,详细参考下面这篇文章:

【第四章】分支循环程序设计,猜数字游戏

然后在Java语言当中,还有一些问题需要注意

1.Java中,表示真假类型的数据只有boolean类型数据,要么是true,要么是false,不存在C语言中0表示假,非0表示真的问题

2.switch语句中,switch可以匹配byte、short、char、int的基本数据类型,引用类型只会匹配String,其他类型均会报错,这一点要注意。


好的,那么本章三个要点就已经介绍完毕了,我们本文主要是依附于C语言中的语法进行介绍的。大家学习的时候最好把C语言也学习一遍,毕竟"C生万物"嘛!下一章,我们会为大家介绍Java的输入输出,数组等知识,喜欢的朋友记得给个三连呦,我们下一章不见不散~

相关推荐
逢君学术论文AI写作1 小时前
Java第22课:Servlet获取请求参数+POST请求+表单交互
java·servlet·ai写作
laowangpython1 小时前
tokio-rstracing:Rust 可观测性的标准答案
开发语言·后端·其他·rust
小马爱打代码1 小时前
Java 开发:过滤器(Filter)与拦截器(Interceptor)深度解析 + CORS 跨域完整解决方案
java
我登哥MVP1 小时前
SpringCloud 核心组件解析:服务熔断和降级
java·spring boot·后端·spring·spring cloud·java-ee·maven
傻啦嘿哟1 小时前
为什么Python没有块级作用域?
开发语言·python
小矮强1 小时前
CASS绘图过程中正射影像不显示的解决方法
经验分享·测绘·cass
霸道流氓气质1 小时前
Spring AI Alibaba Graph 全解析:从入门到精通
java·人工智能·spring
摇滚侠1 小时前
SpringMVC 入门到实战 异常处理 83-85
java·后端·spring·maven·intellij-idea
技术小结-李爽1 小时前
【工具】Shell之Bash、Zsh配置文件的使用
开发语言·bash