疯狂讲义———第3章 数据类型与运算符

news2024/11/6 15:56:15

目录

一.注释的重要性

1.注释

2.Java语言的注释类型

 3.文档注释

二.javadoc命令的用法

三.数据类型的两大类

四.8种基本类型及各自的注意点

1.整型

2.字符型 

3.浮点型

4.布尔型

五.自动类型转换和强制类型转换

六.表达式类型的自动提升

七.Java提供的基本运算符

八.运算符的结合性和优先级

一.注释的重要性

1.注释

用于说明代码段的作用,或者说明某个类的用途、某个方法的功能,以及该方法的参数和返回值的数据类型及意义等。

2.Java语言的注释类型

单行注释

多行注释

文档注释

 3.文档注释

 在编写Java源代码时添加了合适的文档注释,那么通过JDK提供的javadoc工具可以直接将源代里的文档注释提取成一份系统的API文档

API:应用程序接口

二.javadoc命令的用法

基本用法:

Javadoc 选项 Java 源文件|包

三.数据类型的两大类

Java的基本数据类型分为两大类:布尔类型和数值类型;而数值类型又可以分为整数类型和浮点类型,其中整数类型里的字符类型也可被单独对待。

四.8种基本类型及各自的注意点

1.整型

(1)byte

(2)short

(3)int

(4)long

2.字符型 

字符型通常用于表示单个字符,字符型值必须使用单引号(' ')括起来。Java语言使用16位的Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符。包括中文字符,因此Java程序支持各种语言的字符。

3.浮点型

Java浮点型有两种:float和double

4.布尔型

布尔型只有boolean类型,boolean类型的数值只能是true或false

五.自动类型转换和强制类型转换

Java的所有数值类型的变量可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,那么这种方法被称为自动类型转换。----当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换。否则,就需要强制类型转换。

(targetType)value

六.表达式类型的自动提升

+当一个算数表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。

规则如下:

1)所有byte类型、short类型和char类型将被提升到int类型

2)  整个算数表达式的数据类型将被自动提升到与表达式中最高等级的操作数同样的类型

七.Java提供的基本运算符

运算符是什么呢?即:对操作数进行操作时使用的符号,不同操作符的含义各不相同。
    java作为一门优秀的程序设计语言,同样也提供有一整套丰富的运算符来操作变量。Java中的运算符分为:算术运算符(±*/),逻辑运算符(&&,||等),位运算符(& 、|等),关系操作符(><等),移位操作符和条件操作符等。

1.1、算术运算符
    基本四则运算符:+ - * /(也可以叫双目运算符)

        int a = 10;
        int b = 5;
        System.out.println(a + b);//加
        System.out.println(a - b);//减
        System.out.println(a * b);//乘
        System.out.println(a / b);//除
        System.out.println(a % b);//模,就是除法的余数

 需要注意的是运算符使用的时候,要保证运算符两边是相同的类型变量,否则会发生隐式的类型提升,Java会自动将占用内存较小的变量类型提升为占用内存大的变量类型

        int i = d * a;
        double d1 = d * a;
        //两行代码均发生了隐式的类型提升
    如代码,变量a被提升为double类型的,并且运算符计算出来的结果也是两个变量中占用内存最大的决定,如代码,a是int类型,d是double类型的,那么这两个变量经过算术运算符运算之后的结果必然是double类型的,代码1系统会报错。

    在使用除法和模运算符时,要注意右操作数不可以为0,和我们平常的数学运算一样。

    %不仅可以对整数取模,也可以对浮点数取模,但没什么意义,一般是对整型取模。
    两侧操作数类型不同时,类型小的向类型大的提升,运算结果也是类型大的决定

1.2、增量运算符
    增量运算符:+=、-=、*=、/=

        int a = 1;
        a += 1;//a = a + 1   2
        a -= 1;//a = a - 1   1
        a /= 1;//a = a / 1   1
        a %= 1;//a = a % 1   0**

在增量运算符中会发生强制类型转换,运算符的右操作数和左操作数类型不同时,会将右操作数强转为左操作数的类型,从而将结果控制成原来的类型。
1.3、自增/自减运算符
    自增/自减运算符:++ --,就是自增1,自减1的操作

       int a = 10;
        a++;//后置++
        ++a;//前置++
        --a;//前置--
        a--;//后置--

       自增/自减运算符是单目运算符,只需要一个操作数即可
    当自增/自减运算符单独使用的时候,后置和前置没用区别,都是一样的结果
    当自增/自减运算符和其他运算符混搭使用的时候,区别就体现出来了,前置++是先进行自增的操作了之后再运算其他的操作符,后置++是先运算其他的操作符后再进行自增的操作,–也是如此。
1.4、关系运算符
    关系运算符主要有6个,分别是== 、!= 、> 、<、<=、>=,关系运算符的结果只能是boolean类型的,也就是true或者false。

        int a = 10;
        int b = 5;
        System.out.println(a == b);//false
        System.out.println(a != b);//true
        System.out.println(a < b);//false
        System.out.println(a > b);//true
        System.out.println(a <= b);//false
        System.out.println(a >= b);//true

       在Java中,=是赋予,==是相等的意思,和实际的数学是有一定的区别的
    当代码写成10 > a > 1时,系统是无法运算的,因为系统会先执行判断10 > a是否为true还是false,判断得的结果不管是true还是false,此时都变成了booleana类型的和int类型的进行比较了,类型不同,如何比较?无法比较。

1.5、逻辑运算符
    逻辑运算符主要有三个:&& 、|| 、 !,运算结果都是boolean类型的

1.5.1、逻辑与运算符
    语法规则:表达式1 && 表达式2,并且左右两边的表达式的结果必须是Boolean类型的。
    相当于现实生活中的必须要有手机并且手机要有电才可以进行上网。
两个表达式如果有一个是假的,那么整个表达式都是假的
两个表达式必须要都是真的,整个表达式才是真的
两个表达式都是假的,整个表达式也是假的

        int a = 10;
        int b = 5;
        System.out.println(a == b && a != b);//false
        System.out.println(a != b && a > b);//true
        System.out.println(a < b && a == b);//false

      并且在逻辑与表达式中含有一个短路现象,意思就是如果表达式1为真,那么表达式2才会执行
如果表达式1是假的,那么表达式2是不会执行的,直接跳过执行表达式2直接得出结果。

    表达式1是假的,就表达式2不执行,表达式2右操作数为0,从语法上来说是错误的,但是这里编译器并没有报错而是直接输出结果了,这就说明短路现象是真实存在的。

1.5.2、逻辑或操作符
    语法规则:表达式1 || 表达式2,并且左右两边的表达式的结果必须是Boolean类型的。
    相当于现实生活中的只要手机有电,不管手机有没有流量都可以玩游戏。
两个表达式,只要有一个是真的结果就是真的
两个表达式,有一个是假的,另外一个是真的,那结果就是真的
两个表达式,两个都是假的,那结果就是假的

        int a = 10;
        int b = 5;
        System.out.println(a == b || a < b);//false
        System.out.println(a != b || a > b);//true
        System.out.println(a > b || a == b);//true
        System.out.println(a == b || a > b);//true

       逻辑或操作符也含有短路现象,但是逻辑或和逻辑与的短路现象不一样
    当表达式1为真时,表达式2不在执行
    当表达式1为假时,表达式2执行

表达式2还是右操作数的问题,但因为表达式1为真,发生短路,直接跳过表达式2直接输出结果了。

1.5.3、逻辑非
    逻辑非很好理解,就是取反的意思,假的变成真的,真的变成假的,但是Java的逻辑非和C语言的逻辑非不太一样,Java的逻辑非的参数只能对结果是Boolean类型的,参数不可以是变量,但是C语言的可以。
1.6、位运算符
    Java中数据存储的最小单位是字节,数据操作的最小单位是比特位,字节是最小的存储单位,一个字节由8个比特位组成,多个字节组合在一起可以表示不同的数据类型。
    位运算符主要有:& 、 | 、^、,除了是单目操作符以外,其他的都是双目操作符。
    位操作表示按二进制位运算,计算机的底层以及各种数据都是由一串一串的由0和1组成的二进制代码,按位运算就是按二进制的每一位进行运算。

1.6.1、按位与&
    如果两个二进制位都是1,那结果就是1,否则为0;

        int a = 10;
        int b = 5;
        System.out.println(a & b);

1.6.2、按位或|
    如果两个二进制位都是0的话,结果就为0,否则为1.
    当&和|的两个操作符是int,short , long ,tybe 的时候,&和|的作用就是按位运算,如果两个操作符是Boolean类型的,那这个时候表示的就是逻辑运算。

1.6.3、按位取反~
    如果二进制位是1,则转为0,如果二进制位是0则转为1

    按位取反包括符号位也会取反,也就是说,按位取反有正负数转换的效果。

1.6.4、按位异或^
    如果两个数字的二进制位序列相同,那么结果位0,如果二进制位不同则结果位0.

        int a = 5;
        int b = 5;
        System.out.println(a ^ b);//0

1.7、移位操作符
    移位操作符主要有两个:<< , >> , >>>,都是双目操作符,有都是按照二进制位来运算的。

1.7.1、左移操作符<<
    二进制序列的最左位不要了,将右边的代码移动覆盖过去

System.out.println(1 << 1);//等于2

    1 << 1的意思是将1的二进制代码向左移动1位,将左边的第一位丢弃,然后在最右边补0,以达到32个二进制位,无论左边抛弃的是1还是0,右边都是永恒不变的补0。
    并且<<还有乘法的效果,1 << 1 相当于1 * 2

1.7.2、右移操作符>>
    抛弃最右边的,在最左侧补符号位(正数补0 ,负数补1)

        System.out.println(2 >> 1);//等于1
        System.out.println(-2 >> 1);//等于-1

    2 >> 1表示将2的二进制代码向右移动一位,在最右边补符号位,以达到32位二进制代码的条件,右移还有除法的效果,2 >> 1相当于2 / 2的效果
    因为一个数字默认是int型的,int占用4个字节,也就是32个比特位,那就是说一个数字占用32个比特位,所以抛弃多少位就要补多少位。

1.7.3、无符号右移>>>
    抛弃最右边的,在最左侧补0,和右移差不多,但是有本质上的区别,无符号右移,无论是移动正数还是负数,结果都只能是正数。

        System.out.println(8 >>> 1);
        System.out.println(-1 >>> 1);

1.8、条件操作符
    语法格式:表达式1?表达式2:表达式3
    表达式1为真,执行表达式2,表达式3不执行
    表达式1为假,表达式2不执行,执行表达式3

        int a = 10;
        int b = 20;
        int c = a > b ? a : b;


    类似于如果那么否则。
    并且条件运算符必须要进行接收,否则会报错,并且作为接收的变量必须适用于表达式2和表达式3的结果,否则有可能会发生隐式转换或者报错。

二、总结
左移1位,相当于原数字乘以2,左移N位,相当于原数字 * 2的N次方
右移1位,等效于原数字除以2,左移N位,相当于原数字 / 2的N次方
计算机计算移位效率高于计算乘除,所以建议当每个代码正好需要乘除2的N次方的时候可以使用移位运算来代替。
逻辑与:有假为假
逻辑或:有真为真
按位与:有0为0
按位或:有1为1
按位异或:相同为0,相异为1
左移:补0
右移:补符号位
无符号右移:补0
+±-:注意是单独使用还是混合使用,单独使用无需考虑前置后置,混合使用需要考虑前置后置

八.运算符的结合性和优先级

Java语言是一种强类型语言,强类型包含两方面的含义:

(1)所有的变量必须先声明、后使用;

(2)指定类型的变量只能接受类型与之匹配的值;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】递归系列:206.反转链表(两种递归实现)

目录 1、题目链接 2、题目介绍 3、解法 递归法&#xff08;从前往后递归&#xff09; 从后往前递归 4、代码 递归法&#xff08;从前往后递归&#xff09; 从后往前递归 1、题目链接 206.反转链表 2、题目介绍 3、解法 递归法&#xff08;从前往后递归&#xff09; 递归…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛&#xff0c;简称蓝桥杯&#xff0c…

uni-app 运行HarmonyOS项目

1. uni-app 运行HarmonyOS项目 文档中心 1.1. HarmonyOS端 1.1.1. 准备工作 &#xff08;1&#xff09;下载DevEco Studio开发工具。   &#xff08;2&#xff09;在 DevEco Studio 中打开任意一个项目&#xff08;也可以新建一个空项目&#xff09;。   &#xff08;3&…

camera和lidar外参标定

雷达和相机的外参标定&#xff08;外部参数标定&#xff09;指的是确定两者之间的旋转和平移关系&#xff0c;使得它们的坐标系可以对齐。 文章目录 无目标标定livox_camera_calibdirect_visual_lidar_calibration 有目标标定velo2cam_calibration 无目标标定 livox_camera_ca…

【Python3】【力扣题】405. 数字转换为十六进制数

【力扣题】题目描述&#xff1a; 题意理解&#xff1a;&#xff08;不允许使用库函数&#xff09; 数字等于0&#xff0c;则结果为0&#xff0c; 数字小于0&#xff0c;则补码运算&#xff0c;即最高位&#xff08;32位&#xff09;为1&#xff0c;其余全部取反&#xff0c;再加…

扫雷游戏(C语言详解)

扫雷游戏&#xff08;C语言详解&#xff09; 放在最前面的1、前言&#xff08;扫雷游戏的简介&#xff09;2、扫雷游戏的规则&#xff08;简易版&#xff09;3、代码实现&#xff08;3.1&#xff09;提醒一下&#xff1a;( i ) 提醒1&#xff1a;( ii ) 提醒2&#xff1a; &…

PointLIO利用unilidar复现

配置宇树激光雷达的时候出现程序报错问题 问题&#xff1a; 问题链接 原因&#xff1a;普通账户没有权限访问设备——也就是ubuntu 存在串口数据读取权限问题 ttyS0设备的用户主为root,所属的组为dialout 同时owner和group都是有相同的rw权限的&#xff0c;但others是没有任何…

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…

5G基础知识

那个工种&#xff1f; FDD 频分双工&#xff08;Frequency Division Duplexing&#xff09;&#xff0c;理解起来很简单&#xff0c;就是把上行和下行业务隔离在两个频段&#xff0c;互不干扰。 而 TDD 时分双工&#xff08;Time-Division Duplexing&#xff09;&#xff0c;是…

python读取视频并转换成gif图片

1. 安装三方库 moviepy 将视频转换成gif&#xff0c;需要使用 moviepy库 确保已经安装了moviepy库 pip install moviepy2. 代码实现&#xff1a; from moviepy.editor import VideoFileClipmyclip VideoFileClip("video.mp4") myclip2 myclip.subclip(0, 10).re…

Webserver(2.4)进程控制

目录 进程退出孤儿进程僵尸进程wait函数waitpid函数 进程退出 exit 刷新IO缓冲区 _exit 孤儿进程 父进程运行结束&#xff0c;但子进程还在运行&#xff0c;这样的子进程称为孤儿进程。 每当出现一个孤儿进程的时候&#xff0c;内核就把孤儿进程的父进程设置为init&#xff…

UART-通用异步收发器

1. UART的基本工作原理 UART通信主要有两个部分构成&#xff1a;发送器和接收器&#xff0c;也就是我们常见的&#xff08;RX接收&#xff0c;TX发送&#xff09;两个独立的线路来实现数据的双向传输&#xff0c;由于是异步的&#xff0c;UART并不需要时钟信号&#xff0c;而是…

linux 互斥锁

首先是概念 互斥锁是可以休眠的。 所以不能在中断中使用&#xff0c; 在中断中只能使用 自旋锁。 然后是 函数&#xff1a; 然后是 open 如果以 NONBLOCK 打开&#xff0c; 遇到 互斥锁怎么办&#xff1f; 总结一下&#xff1a; 1 open() 函数的 阻塞与不阻塞的标志&#…

第72期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

[ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Linux运维高手工具全集及功能分类:20+必备神器

文章目录 Linux运维高手工具全集及功能分类&#xff1a;20必备神器一、系统管理与配置1.1 Shell1.2 Ansible1.3 Puppet1.4 Chef 二、监控与告警2.1 Prometheus2.2 Grafana2.3 Zabbix2.4 Nagios2.5 ELK Stack&#xff08;Elasticsearch, Logstash, Kibana&#xff09; 三、容器与…

安卓APP开发中,如何使用加密芯片?

加密芯片是一种专门设计用于保护信息安全的硬件设备&#xff0c;它通过内置的加密算法对数据进行加密和解密&#xff0c;以防止敏感数据被窃取或篡改。如下图HD-RK3568-IOT工控板&#xff0c;搭载ATSHA204A加密芯片&#xff0c;常用于有安全防护要求的工商业场景&#xff0c;下…

什么是x86架构,什么是arm架构

什么是 x86 架构&#xff1f; x86 架构是一种经典的指令集架构&#xff08;ISA&#xff09;&#xff0c;最早由英特尔在 1978 年推出&#xff0c;主要用于 PC、服务器等领域。 它是一种复杂指令集计算&#xff08;CISC&#xff09;架构&#xff0c;支持大量的复杂指令和操作&…

知识分享 | SNP检测试剂盒开发注意事项及启衡星CDMO案例分享

一、SNP检测方法 常规有阵列的杂交、qPCR和测序等多种方法&#xff0c;其中基于qPCR方法的SNP检测试剂盒因具有快速、简便的优势&#xff0c;已有大量检测试剂盒上市。如&#xff1a;人CYP2C9和VKORC1基因检测试剂盒、人类SLCO1B1和ApoE基因分型检测试剂盒、人ADRB1&#xff0…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时&#xff0c;为了传输一个整数1&#xff0c;我们需要传输00000000 00000000 00000000 00000001 32 个 bits&#xff0c;而有价…