Java学习_day03_变量数据类型运算符

文章目录

  • 变量
    • 定义
      • 声明
      • 赋值
      • 使用
      • 简化
  • 数据类型
    • 基本数据类型
      • 整型
      • 浮点型
      • 布尔型
      • 字符型
      • 空型
    • 引用数据类型
    • 数据类型转换
      • 自动类型转换
      • 强制类型转换
  • 运算符
    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 条件运算符
    • 一元运算符
    • 二元运算符
    • 三元运算符
    • 运算符优先级

变量

变量类似于数学中的未知数x,是计算机中内存地址的一个别名。这样就可以通过这个变量来操作该内存空间的存储内容了。
在这里插入图片描述

定义

在Java中变量需要先声明再使用。故变量的定义可以分为三步:声明,赋值和使用。

声明

声明就是声明一个变量的数据类型和其名称,格式如下:数据类型 变量名称
数据类型可以指定这个变量所占的内存空间大小。

// 声明一个变量
int age;

赋值

赋值就是为声明的变量,存储一个内容,格式如下:变量名 = 值

// 为变量赋值
age = 12;

使用

当变量完成声明和赋值后,就可以使用了。

// 使用变量
System.out.println("我的年龄是: " + age);

简化

为了提供效率,有时候也可以将声明和赋值合并在一步中,格式如下:数据类型 变量名 = 值
上述例子可以简化为:

int age = 12;
System.out.println("我的年龄是: " + age);

数据类型

Java是强数据类型的语言,变量之间进行运算时,需要变量的数据类型具有兼容性。数据类型通常分为无引用数据类型(基础数据类型)和引用数据类型。

基本数据类型

基础数据类型通常分为数值型,字符型,布尔型和空型。
在这里插入图片描述

整型

整型数据类型用来表示整数,根据不同数据类型所占的内存大小,分为byte,short,int和long这四种数据类型。

数据类型内存大小数据范围案例
byte1字节-2^7 ~ 2^7-11
short2字节-2^15 ~ 2^15 -12
int4字节-2^31 ~ 2^31 -13 默认
long8字节-2^63 ~ 2^63 -13L

浮点型

浮点型表示小数,根据精度不同,分为float和double两种数据类型。

数据类型内存大小数据范围案例
float4字节-3.403E38 ~ 3.403E382.0F
double8字节-1.798E308 ~ 1.798E3082.0D 默认

布尔型

布尔型主要有两个true和false,通常用在条件语句和循环语句中。

字符型

字符型表示单个字符,用单引号包围,例如’a’。内存空间为2个字节。实现原理,底层存储为整型。几个特殊的字符所对应的整型,'A’为65,'a’为97,'0’为48

空型

空型表示一种特殊的类型,通常用在方法中,表示没有返回值。

引用数据类型

引用数据类型有类,接口,枚举,注解和数组等。

数据类型转换

Java中通常当数据类型不一致时,会编译报错。所以在使用过程中需要进行数据类型转换。

自动类型转换

当运算过程中,当操作数的数据类型不一致时,java会先将操作数的数据类型自动转换为统一的数据类型,然后再以统一的数据类型输出结果。
自动类型转换的规律是,内存空间低的数据类型可以自动转换为内存空间高的数据类型。
在这里插入图片描述

强制类型转换

当将内存空间高的数据类型转换为内存空间低的数据类型时,需要进行强制数据类型转换。格式:(数据类型) 变量名
当进行强制数据类型转换时,需要注意的是注意截断问题
在这里插入图片描述
布尔型无法与其他数据类型进行转换。

  1. 表达式类型自动提升的一般原则:表达式结果的类型为操作数中最大的类型
  2. byte类型和short类型进行运算时,系统自动当作int类型处理
  3. char变量可以保存为int常量值,但不能直接保存为int变量值,char类型进行运算时,系统自动当作int类型处理
  4. 自动类型转换的逆过程是将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符号,但可能造成精度降低或溢出,需要格外注意。
  5. 强制转换符号为小括号,优先级非常高,故强制转换表达式结果的类型时,需要将表达式用小括号包起来,提升优先级。
  6. 布尔类型不可以转换为其他的数据类型。
short a = 97;
int b = 200;
a = (short) b;

运算符

运算符就是Java中特殊的符号,表示运算方法。

算术运算符

运算符说明示例
+正号+2
-负号-4
+加法a +b
-减法a-b
*乘法a*b
/除法a/b
%取余a%b
++自增++a,a–
自减–a,a–
+字符串连接“a”+b

特殊运算符的说明

  • 除法,被除数、除数都是整型,则结果为整型,且结果以阶段方式取整。若被除数或除数是浮点型,则结果就是浮点型。都是整型时,除数为0时会产生ArithmeticException异常,浮点型时,除数为0或0.0时,则不会报异常,得到的结果是Infinity。
  • 当除数为0时,取余的结果为NaN
  • ++和–不会改变本身变量的数据类型
  • ++a时,a先自增1,再去变量的值做其他运算
  • a++时,先取变量的值放入操作数栈,随后自增变量增1,然后用自增之前取的值进行运算
  • +作为字符串连接符时,可以和八种基本数据类型变量运算,运算结果为String

赋值运算符

复合赋值运算符是先进行运算然后数据类型转换,最后赋值。注意根据左侧操作数的数据类型,进行数据类型强转

运算符说明示例
=赋值a = 2
+=加等a += 2
-=减等a -= 2
*=乘等a *= 2
/=除等a /= 2
%=取余等a %= 2
&=位与等a &= 2
|=位或等a |= 2
^=位异或等a ^= 2
<<=左移等a <<= 2
>>=右移等a >>= 2
>>>=无符号右移等a >>>= 2

比较运算符

比较时操作数的类型具有一致性或兼容型
比较运算符就是用来比较变量值之间的大小,比较运算符的结果都是布尔型。Java中比较运算符如下表:

运算符说明案例
==相等a == b
!=不等a != b
<小于a < b
>大于a > b
<=小于等于a <= b
>=大于等于a >= b

Java中最对基本数据类型和引用类型,在相等判断上有区别:

  • 如果两个操作数为基本数据类型,则“==”判断的是值是否相等。
  • 如果两个操作数为引用类型,则“==”判断的是两个引用是否指向同一个对象实体或数组实体。

逻辑运算符

逻辑运算符用于表示多个条件之间的相关关系,其结果也为布尔型。两侧的操作数的数据类型为布尔型。
Java中逻辑运算符如下表:

运算符案例说明
&&a && b短路与,a为false时,b不会被执行,直接返回false,效率更高,其他与与运算符一致。
&a & b与,只有a和b都为true时,返回true,否则返回false;a和b都会被执行
||a || b短路或,a为true时,b不会被执行,直接返回true,效率更高。
|a | b或,只有a和b都为false时,返回false,否则返回true;a和b都会被执行
^a ^ b异或,当a和b相同时,返回false;不同时返回true
!!a非,返回与a相反的结果

位运算符

位运算符的操作数的数据类型位数值类型。
位运算符就是操作变量的二进制码,效率比较高,但是比较抽象难懂。因为它的操作都是针对变量在内存中的补码形式进行。

运算符案例说明
<<a << 2将a的二进制补码左移2位,移出的低位以0补充。一定范围内,左移几位相当于乘以2的几次方
>>a>>2将a的二进制补码右移2位,如果a的高位为0,则移出的高位以0补充;如果移出的高位为1,则移出的高位以1补充。
>>>a >>> 2将a的二进制补码右移2位,移出的高位以0补充
&6 & 2将6和2的二进制补码,按位进行与操作,返回执行后的数值
|6 | 2将6和2的二进制补码,按位进行或操作,返回执行后的数值
^6 ^2将6和2的二进制补码,按位进行异或操作,返回执行后的数值
~~6将6的二进制补码,按位取反,并返回执行后的数值

通过操作数的类型来判断是位运算符还是逻辑运算符

条件运算符

条件运算符是唯一的三元运算符,可以实现简单的条件判断。
语法结构为:条件表达式?表达式1:表达式2

  • 当条件表达式结果为true时,返回表达式1的结果
  • 当条件表达式结果为false时,返回表达式2的结果
  • 表达式1和表达式2具有相同的数据类型

一元运算符

一元运算符有四个,分别为++, --, !和~。

二元运算符

除了一元和三元运算符外,剩下的都是二元运算符。

三元运算符

Java中只有一个三元运算符,其语法为:条件表达式?值1:值2,当条件表达式为true时,返回值1,否则返回值2

运算符优先级

和四则运算一样,当表达式中出现多个运算符时,计算器根据优先级,决定先执行哪个部分的运算。优先级越高,越优先执行。
通常利用小括号来实现优先级的提高。

优先级运算符符号
1++, --, ~, !
2*, /, %
3+, -
4<<, >>, >>>
5<, >, <=, >=, instanceof
6==, !=
7&
8^
9|
10&&
11||
12?:
13=, *=, /=, %=
14+=, -=, <<=, >>=
15>>>=, &=, ^=, |=

在做运算符相关的题时记住已经几点就可以确保无错:

  • 操作数的类型统一性
  • 优先级相关的可以参考后缀表达式来理解

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

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

相关文章

计算机算法分析与设计(12)---贪心算法(最优装载问题和哈夫曼编码问题)

文章目录 一、最优装载问题1.1 问题表述1.2 代码编写 二、哈夫曼编码2.1 哈夫曼编码概述2.2 前缀码2.3 问题描述2.4 代码思路2.5 代码编写 一、最优装载问题 1.1 问题表述 1. 有一批集装箱要装上一艘载重量为 c c c 的轮船&#xff0c;已知集装箱 i ( 1 ≤ i ≤ n ) i(1≤i≤…

【C++】假设给类分配的是栈的空间,那么计算机是如何访问栈中不同位置的对象的数据的呢?

2023年10月22日&#xff0c;周日上午 当在栈上创建一个对象时&#xff0c;计算机会为该对象分配一块连续的内存空间。该内存空间的位置在栈帧中&#xff0c;栈帧是用来存储函数调用信息和局部变量的一块内存区域。 栈帧中包含一个指针&#xff0c;称为栈指针&#xff08;stack…

昇腾CANN 7.0 黑科技:大模型训练性能优化之道

目前&#xff0c;大模型凭借超强的学习能力&#xff0c;已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练&#xff0c;通常具有良好的通用性和泛化性。用户基于“大模型预训练微调”开发范式即可在实际业务场景取…

MySQL——练习

MySQL 一、练习要求二、练习过程 一、练习要求 创建表并插入数据&#xff1a; 字段名数据类型主键外键非空唯一自增idINT是否是是否nameVARCHAR(50)否否是否否glassVARCHAR(50)否否是否否 sch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun glass 21、创建一个可以统计…

dirsearch网站目录暴力破解

介绍&#xff1a; dirsearch是一个基于python3的命令行工具&#xff0c;常用于暴力扫描页面结构&#xff0c;包括网页中的目录和文件。相比其他扫描工具disearch的特点是&#xff1a; 支持HTTP代理多线程支持多种形式的网页&#xff08;asp,php&#xff09;生成报告&#xff0…

PostgreSQL与MySQL数据库对比:适用场景和选择指南

数据库是现代应用程序的基石之一&#xff0c;而在选择合适的数据库管理系统&#xff08;DBMS&#xff09;时&#xff0c;开发者常常会面临着许多选择。在这方面&#xff0c;PostgreSQL和MySQL是两个备受瞩目的选项。本文将深入研究这两者之间的异同&#xff0c;并为您提供适用场…

【使用OpenCV进行目标分割与计数的代码实例详解】

文章目录 概要实例一&#xff1a;硬币分割计数实例二&#xff1a;玉米粒分割计数 概要 在当今数字图像处理领域&#xff0c;图像分割技术是一项至关重要的任务。图像分割旨在将图像中的不同目标或区域准确地分开&#xff0c;为计算机视觉、图像识别和机器学习等领域提供了坚实…

[C语言]排序的大乱炖——喵喵的成长记

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

【微服务 SpringCloud】实用篇 · Ribbon负载均衡

微服务&#xff08;4&#xff09; 文章目录 微服务&#xff08;4&#xff09;1. 负载均衡原理2. 源码跟踪1&#xff09;LoadBalancerIntercepor2&#xff09;LoadBalancerClient3&#xff09;负载均衡策略IRule4&#xff09;总结 3. 负载均衡策略3.1 负载均衡策略3.2 自定义负载…

C++前缀和算法的应用:向下取整数对和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 向下取整数对和 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 floor(nums[i] / nums[j]) 结果之和。由于答案可能会…

Kubeadm部署k8s集群 kuboard

目录 主机准备 主机配置 修改主机名&#xff08;三个节点分别执行&#xff09; 配置hosts&#xff08;所有节点&#xff09; 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包&#xff08;所有节点&#xff09; 系统参数设置(所有节点) 时间同步(所有节点) 配…

(转)c 多张图片生成avi视频

https://www.cnblogs.com/songhe364826110/p/7619949.html 修改了几个参数&#xff0c;可以生成视频了。下载主要是为了学习avi视频格式。最后编一个摄像头生成视频的程序。 本程序把标准avi 视频格式的各种数据结构自定义在文件头(JpegAVI.h)中&#xff0c;所以就不用去下载…

Java面试题-UDP\TCP\HTTP

UDP UDP特性 &#xff08;1&#xff09;UDP是无连接的&#xff1a;发送数据之前不需要像TCP一样建立连接&#xff0c;也不需要释放连接&#xff0c;所以减少了发送和接收数据的开销 &#xff08;2&#xff09;UDP 使用尽最大努力交付&#xff1a;即不保证可靠交付 &#xff0…

Java开发规范记录

不要使用 count(column)或 count(1)来替代 count(*)&#xff0c;count(*)是 SQL92 定义的 标准统计行数的语法&#xff0c;跟数据库无关&#xff0c;跟 NULL 和非 NULL 无关。 注意&#xff1a;count(*)会统计值为 NULL 的行&#xff0c;而 count(列名)不会统计此列为 NULL 值的…

高级深入--day35

反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consi…

Java面向对象(基础)--package和import关键字的使用

文章目录 一、package关键字的使用1. 说明2. 包的作用3. JDK中主要的包 二、import关键字的使用 一、package关键字的使用 1. 说明 package:包package用于指明该文件中定义的类、接口等结构所在的包。语法格式 举例&#xff1a;pack1\pack2\PackageTest.java package pack1.…

Xshell+screen解决ssh连接 服务器掉线的问题

Linux screen命令解决SSH远程服务器训练代码断开连接后运行中断_linux screen ssh-CSDN博客 Linux命令之screen命令_linux screen_恒悦sunsite的博客-CSDN博客 使用教程&#xff1a; 这里粗略介绍一下 &#xff08;1&#xff09;xshell xftp&#xff08;xshell点这个&#…

Git合并某个分支上的某个提交

1. 首先&#xff0c;确保你当前所在的分支是你要合并分支的父分支。你可以使用以下命令切换到父分支&#xff1a; git checkout <父分支名称> 2. 确保你要合并的分支是可用的。你可以使用以下命令查看所有可用的分支&#xff1a; git branch -a 这将显示所有本地和远程…

组合数(递推版)的初始化

初始考虑为将第一列数和斜对角线上的数进行初始化。 橙色方块由两个绿色方块相加而来&#xff0c;一个为1&#xff0c;一个为0&#xff0c;所以斜对角线都为1&#xff0c;可以通过计算得来&#xff0c;不需要初始化&#xff0c;需要与码蹄集盒子与球 第二类Stirling数&#xf…

Sobel算子详解及例程

Sobel算子是一种经典的边缘检测算子&#xff0c;被广泛应用于图像处理领域。它基于图像亮度的变化率来检测边缘的位置&#xff0c;主要通过计算图像中像素点的梯度来实现。 Sobel算子分为水平和垂直两个方向的算子&#xff0c;记作Gx和Gy。它们分别对图像进行水平和垂直方向的…