JavaSE学习--数据类型和运算符

news2024/11/26 23:20:18

 💕"哪里有人喜欢孤独,只不过更不喜欢失望。"💕

作者:Mylvzi 

 文章主要内容:JJavaSE学习--数据类型和运算符 

Java程序是如何运行的?

一.数据类型

整型:

注意事项:

1.整型变量在赋值的过程中要注意数据类型的取值范围,如果越界会报错;注意Java中没有Long long类型

2.整型变量都有包装类型,除了int的包装类型为Integer外,其余都是首字母大写;包装类型就是他们的plus版本,里面有方法和属性; 

3.整数会被默认为int类型,所以在使用long进行赋值时要在数字末尾添加大写L 

4. int在所有系统下都是4个字节,long在所有系统下都是8个字节

5.int,long都是有符号的

浮点型 

注意事项;


1.小数会被默认为double类型,而Java是一种强类型语言,使用float进行赋值时一定要在数字末尾添加f

 

2.浮点型数据也有包装类型,为首字母大写

3.由于其存储规则,浮点数都是不精确的,只有前XXXX位是精确的 

字符型:

1.char类型占两个字节,比C语言中的范围更大;一个汉字占两个字节,所以java中char类型可以存储一个汉字;Java使用的是Unicode编码,相当于是ASCII码的plus版本;

2.包装类型:Character 

布尔类型:

1.关键字--》boolean;只有两个值true,false;包装类型为Boolean;java中只有true和false才表示真假,在C语言中0可以表示假,但在Java中不表示 

注意:

1.不是所有的数据类型都能进行强制类型转换,布尔类型无法强制类型转换;

2.Java是一种强类型语言,有严格的语法规范; 一定要注意明确数据类型;

类型转换:

隐式类型转换-->小转大-->自动转换

显式类型转换-->大转小 -->必须人为添加强转类型

1.隐式类型转换

        // 1.自动转换(隐式类型转换)
        // 小范围-->大范围  不存在数据丢失,所以编译器会自动转换
        int a = 1024;// 注意整数默认都是Int  浮点型默认都是double类型
        long b = 10L;

        float c = 3.1f;
        double d = 4.0;

        b = a;// 编译通过
        a = b;// err 大范围--》小范围,会有数据丢失

2. 显式类型转换

        // 2.强制转换(显式类型转换)
        int a = 1024;
        long b  = 10L;
        
        float c = 3.14F;
        double d = 4.0;
        
        a = (int)b;// long > int  所以要进行强制类型转换
        c = (float) d;// double > float  所以要进行强制类型转换

3.检查范围 

        // 3.检查范围
        // byte -128~127
        byte a = 127;// right
        byte b = 128;// err 

 4.不相干的类型无法进行转换

        // 4.不相干的类型无法进行转换
        boolean a = true;
        int b = 10;
        b = (int)a;// err

总结:

1.小范围向大范围转移时,编译器会自动进行类型转换

2.大范围向小范围转移时,编译器不会自动进行类型转换,需要进行强制类型转换,但可能存在精度的丢失

3.在进行赋值时,编译器会检查数字是否超过对应类型的范围

4.不相干的类型无法进行强制类型转换(主要指布尔类型无法和其他类型进行强制类型转换)

类型提升

 1.int类型会被自动提升到long类型

        int a = 10;
        long b = 20L;
        
        int c = a+b;// err a+b-->int+long-->long+long 而c时int类型,大范围向小范围转移会报错
        long d = a+b;// right 被提升后是Long类型

当int类型的数据和Long类型的数据进行运算时,int类型的数据会被自动提升到long类型(范围扩大)

2.byte,short类型的数据会被提升到int类型

        byte a = 10;
        byte b = 20;
        
        byte c = a+b;// err  a+b-->byte+byte-->int+int 而c时byte类型,大范围向小范围转移会报错
        byte d = (byte)(a+b);// 进行强制类型转换即可
        
        short a2 = 10;
        short b2 = 20;
        short c2 = a2+b2;// err理由同上
        short d2 = (short) (a2+b2);

由于cpu在读取数据时一次读取4个字节,所以对于大小小于4个字节的数据(byte和short)来说,在进行运算时会被自动提升到int类型 

字符串类型:

1.基本概念

  在Java中字符串类型是一种引用数据类型,通过关键字String标识(注意S大写)

        String s1 = "hello";
        String s2 = "world";
        System.out.println(s1+" "+s2);// +代表将两边的内容拼接起来

 

2.int与String的转换

1.int-->String

        int a = 10;
        // 方法1
        String str1 = a+" ";

        // 方法2-->利用了String类的方法
        String str2 = String.valueOf(a);
        System.out.println(str2);

2.String-->int

        String str1 = "100";
        int a  = Integer.parseInt(str1);// 利用Integer类的方法
        System.out.println(a);

 

本文章只是对字符串进行简单的介绍,大家能够正常使用即可,后序会详细给大家介绍。 

二.运算符

1.算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数

注意事项:

1./运算符右操作数不能是0

 2.两侧操作数类型不同,向类型大的提升

System.out.println(1+0.2); // +的左侧是int,右侧是double,在加之前int被提升为double
// 故:输出1.2

 2. 增量运算符 += -= *= %=

int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6

3. 自增/自减运算符 ++ -- 

int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似

注意a++和++a的区别

2. 关系运算符 

关系运算符主要有六个: == != < > = ,其计算结果是 true 或者 false 。

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false

注意:需要多次判断时不能连着写:3<a<5,这种写法是错误的,可以使用&&来连接两个判断式子

3. 逻辑运算符(重点) 

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

1.&&逻辑与    一假俱假

&&左右两边必须是boolean类型的结果

一假俱假:只要有一个式子的结果是false,则整个判断结果为false

int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假

2. 逻辑 ||     一真俱真

|| 左右两边必须是boolean类型的结果

一真俱真:只要有一个式子的结果是true,则整个判断结果为true

int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假

3. 逻辑非 !

运算关键字:!

真变假  假变真

int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true

4.短路求值

 && 和 || 遵守短路求值的规则

  • 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  • 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式
        System.out.println(10>20 && 10/0==0);// 输出false
        System.out.println(10<20 || 10/0==0);// 输出true

对于这段代码,后段部分10/0按理说会报错,但是代码却能通过编译,并产生结果,说明后段部分并没有被执行,发生了短路求值!

 4. 位运算符

  Java中数组存储的最小单位是字节,而操作的最小单位是位(bit);

位运算符就是“按二进制位运算”,对二进制位进行调整运算

1. 按位与 &:

如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

        System.out.println(1 & 2);// 输出0
        // 1:0001
        // 2:0010
        // &: 0000

2. 按位或 |:

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1. 

        System.out.println(1 | 2);// 输出3
        // 1:0001
        // 2:0010
        // |:0011

3. 按位取反 ~:

如果该位为 0 则转为 1, 如果该位为 1 则转为 0 

        int a = 0xf;
        System.out.printf("%x\n", ~a);// 输出fffffff0
        // %x代表以16进制输出
        // f对应10进制中的15

4. 按位异或 ^:

如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1. 

        int a = 0x1;
        int b = 0x2;
        System.out.printf("%x\n", a ^ b);// 输出3

注意:如果两个相同的数字^,则输出0

5. 移位运算

移位运算符有三个: > >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

1. 左移 <<: 最左侧位不要了, 最右侧补 0.

        int a = 1;
        System.out.println(a<<1);// 输出2
        // 1:0001
        // 0010

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1) 

        int a = 1;
        System.out.println(a>>1);// 输出0

3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0 

      int a = 0xffffffff;
        System.out.printf("%x\n", a >>> 1);
        // 1111 1111 1111 1111 1111 1111 1111 1111
        // 0111 1111 1111 1111 1111 1111 1111 1111
        // 7    f    f    f    f    f    f    f

注意没有无符号左移!!!

应用:

 <<1位相当于*2,>>1位相当于/2,所以可以用位运算符来进行数学运算(速度更快) 

<< n 位相当于*2^n,>> n 位相当于/2^n

        System.out.println(10<<1);// 输出20
        System.out.println(10>>1);// 输出5
        System.out.println(10<<2);// 输出40
        System.out.println(10>>2);// 输出2

6. 条件运算符 

条件运算符只有一个: 表达式1 ? 表达式2 : 表达式3

  • 当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
  • 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值

类似于C语言中的三目运算符,可以起到简化代码的效果(主要是可以简化简单的if-else语句)

        // 求两个整数的最大值
        int a = 10;
        int b = 20;
        // 三目运算符的结果必须被接收,否则会报错!!!
        int max = a > b ? a : b;
        System.out.println(max);// 输出20

 

 

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

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

相关文章

Android 使用Kotlin封装RecyclerView

文章目录 1.概述2.运行效果图3.代码实现3.1 扩展RecyclerView 3.2 扩展Adapter3.3 RecyclerView装饰绘制3.3.1 以图片实现分割线3.3.2 画网格线3.3.3空白的分割线3.3.4 不同方向上的分割线 3.4 使用方法 1.概述 在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装…

Linux 网络编程

套接字&#xff08;Socket&#xff09;&#xff1a; 通过网络实现跨机通信 作用&#xff1a;一种文件描述符传输层的文件描述符 整个编程中&#xff0c;需要着重注意htonl/htons、ntohl/ntohs、inet_addr等 TCP的C/S实现 循环服务器模型 TCP服务器实现过程 1.创建套接字&a…

Web 中间件怎么玩?

本次主要是聊聊关于 web 中间件&#xff0c; 分为如下四个方面 什么是 web 框架中间件 为什么要使用 web 中间件 如何使用及其原理 哪些场景需要使用中间件 开门见山 web 中间件是啥 Web 框架中的中间件主要指的是在 web 请求到具体路由之前或者之后&#xff0c;会经过一个或…

MyBatis 映射文件(Mapper XML):配置与使用

MyBatis 映射文件&#xff08;Mapper XML&#xff09;&#xff1a;配置与使用 MyBatis是一个强大的Java持久化框架&#xff0c;它允许您将SQL查询、插入、更新和删除等操作与Java方法进行映射。这种映射是通过MyBatis的映射文件&#xff0c;通常称为Mapper XML文件来实现的。本…

正点原子lwIP学习笔记——MQTT协议

1. MQTT简介 MQTT是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。他的设计思想是轻巧、开放、简单、规范&#xff0c;易于实现。这些特点使得他对很多场景来说都是很好的选择&#xff0c;尤其是对于受限的环境如机器与机器的通信&#xff08;M2M&#xff09;以及物…

python根据命令行参数动态导入模块或文件

需求 在命令行运行一个 python 文件&#xff0c;同时传入自定义参数&#xff1a; $ python main.py --nodeTable --actioncreate --data"{name: test2, is_sys_obj: False, encoding: UTF8,datconnlimit: -1, variables: []"希望 main.py 接收命令行参数&#xff0…

1.6.C++项目:仿mudou库实现并发服务器之channel模块的设计

项目完整版在&#xff1a; 文章目录 一、channel模块&#xff1a;事件管理Channel类实现二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、代码&#xff08;一&#xff09;框架&#xff08;二…

快速上手 Docker Swarm:构建分布式容器集群、轻松管理节点和服务

什么是Docker Swarm Docker Swarm 是 Docker 的内置编排工具&#xff0c;它允许将多个 Docker 主机组成一个集群&#xff0c;并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力&#xff0c;使得应用程序能够在集群中弹性地运行和扩展。 Docke…

唤醒手腕 Matlab 游戏编程常用技术知识点详细教程(更新中)

Figure 窗口初始化 figure 使用默认属性值创建一个新的图窗窗口。生成的图窗为当前图窗。f figure(___) 返回 Figure 对象。可使用 f 在创建图窗后查询或修改其属性。figure(f) 将 f 指定的图窗作为当前图窗&#xff0c;并将其显示在其他所有图窗的上面。 figure(n) 查找 Nu…

8、Docker-compose容器编排

一、Docker compose 是什么 Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;写好多个容器之间的调用关系。然后&#xff0c;只要一个命令&#xff0c;就能同…

cadence SPB17.4 S032 - 使用room来放置元件

文章目录 cadence SPB17.4 S032 - 使用room来放置元件概述笔记在orcad中设置子原理图的ROOM号码在空的Allegro工程中, 放入板框在allegro中建立room备注补充 - ROOM还得留着END cadence SPB17.4 S032 - 使用room来放置元件 概述 如果在allegro中直接手工或自动放置元件, 放好…

scala基础入门

一、Scala安装 下载网址&#xff1a;Install | The Scala Programming Language ideal安装 &#xff08;1&#xff09;下载安装Scala plugins &#xff08;2&#xff09;统一JDK环境&#xff0c;统一为8 &#xff08;3&#xff09;加载Scala &#xff08;4&#xff09;创建工…

单调队列 - 滑动窗口

154. 滑动窗口 - AcWing题库 O(1)求窗口中的最大值/最小值 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double l…

gdb的使用

目录 gdb工具的使用 代码调试相关指令 运行程序指令 r 显示代码的指令 l 给代码打断点 b 查看断点位置 info b 执行代码到断点处停止 关闭断点 d断点编号 关闭某个断点&#xff0c;但不删除 disable编号 打开某个断点 enable断点编号 逐过程调试代码 n 逐语句调试代码 s 查看…

【外设】拓展坞接入外设一直弹窗报错问题

外设相关&#xff1a;多功能拓展坞安装后使用正常但计算机一直弹窗报错 1.基本配置信息&#xff1a; 拓展坞&#xff1a;绿联6合1 笔记本&#xff1a;lenovo &#xff08;硬件:13^i5;系统&#xff1a;win11&#xff09; 外设&#xff1a;1键1鼠1显示器1硬盘 2.存在的问题&am…

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 问题解决

LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一&#xff1a;使用预编译指令方法二&#xff1a;使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好&#xff0c;使用 “文…

【单片机】12-串口通信和RS485

1.通信有关的常见概念 区分&#xff1a;串口&#xff0c;COM口&#xff0c;UART&#xff0c;USART_usart和串口区别-CSDN博客 串口、COM口、UART口, TTL、RS-232、RS-485区别详解-CSDN博客 1.什么是通信 &#xff08;1&#xff09;人和人之间的通信&#xff1a;说话&#xff…

java项目之校园餐厅管理(ssm源码+文档)

项目简介 校园餐厅管理实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、商家管理、用户管理、菜系类别管理、校园美食管理、在线下单管理、美食论坛、系统管理。商家前台&#xff1a;首页、校园美食、论坛信息、新闻资讯、我的、跳转到后台、客服。商家&#xff1a;…

第4讲:vue内置命令(文本插值,属性绑定,v-text,v-html)

MVVM 什么是MVVM&#xff1f; MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化&#xff0c;让我们将视图 UI 和业务逻辑分开。 View层&#xff1a; 视图层 在我们前端开发中&#xff0c;通常就是 DOM 层。 主要的作用是…

Error: Activity class {xxx.java} does not exist

git切换到不同的branch之后&#xff0c;报下面的错误&#xff1a; Error: Activity class {xxx.java} does not exist 解决方案&#xff1a; 首先clean 然后会删除build目录 然后点击&#xff1a;Invalidate Caches Android Studio重启&#xff0c;然后重新build即可。