图灵日记之java奇妙历险记--数据类型与变量运算符
目录
- 数据类型与变量
- 字面常量
- 数据类型
- 变量
- 语法格式
- 整型变量
- 浮点型变量
- 字符型变量
- 希尔型变量
- 类型转换
- 自动类型转换(隐式)
- 强制类型转换(显式)
- 类型提升
- 不同数据类型的运算
- 小于4字节数据类型的运算
- 字符串类型
- 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 逻辑与&&
- 逻辑或||
- 逻辑非!
- 短路求值
- 位运算符
- 按位与&
- 按位或 |
- 按位取反 ~
- 按位异或^
- 移位运算
- 条件运算符
数据类型与变量
字面常量
看下面这个栗子,宝子们
System.out.println("cheer up!!!");
输出的"cheer up!!!"就是字面变量
字面常量的值在程序的整个生命周期中是不变的
字面常量的分类:
字符串常量
整形常量
浮点数常量
字符常量
布尔常量:只有两种true和false
空常量
注意:字符串,整形,浮点型,字符型以及布尔型,在java中都被叫作数据类型
数据类型
java中数据类型主要分为两类:基本数据类型和引用数据类型
基本数据类型有四类八种:
- 四类:整型、浮点型、字符型以及布尔型
- 八种:
字节型 byte 1字节
短整型 short 2字节
整型 int 4字节
长整型 long 8字节
单精度浮点数 float 4字节
双精度浮点数 double 8字节
字符型 char 2字节
布尔型 boolean
整型和浮点数都是带符号的
整型默认为int型,浮点型默认为double
变量
语法格式
数据类型 变量名 = 初始值
整型变量
分类:整型变量,长整型变量,短整型变量,字节型变量
注意:长整型初始值后面加L或者l,建议L,避免l长得太像1混淆
浮点型变量
包括单精度浮点型和双精度浮点型
和c语言一样,浮点数使用有限空间表示必然存在误差,浮点数是近似值不是精确值
字符型变量
宝子们目光向这里看
public class test
{public static void main(String[] args) {System.out.println("启动");System.out.println("시동");System.out.println("Ініціювати");}
}
计算机里的字符本质是一个整数,c语言使用的ASCII码表示字符,为了扩充更多的字符,采用unicode表示字符,一个字符占用2字节
有兴趣可以查询Java char 型了解一下
希尔型变量
布尔类型用来判断真假
public class test
{public static void main(String[] args){boolean a = true;System.out.println(a);}
}
与c语言不一样,java的布尔类型就是true表示真,false表示假,而并非像c语言当中的非0表示真,0表示假,boolean与int类型不存在转换关系
在java虚拟机规范中并未明确规定boolean占几个字节
类型转换
public class test
{public static void main(String[] args){int a = 10;long b = 2;b = a;}
}
自动类型转换(隐式)
如上图,数据范围小(int类型)的a赋值给b时,要转化为数据范围更大的long类型,这个过程会自动进行,比如int是个小盆子,long是个水缸(容量比小盆子大),int里的水倒入水缸里肯定不会溢出,但是倒过来就不行了,因为变量的值在编译过程是未知的,可能很大,你把水缸的水倒入盆子里就溢出,造成数据丢失了,但如果你非要把水缸里的水倒进盆子里,就要进行强制类型转换了
强制类型转换(显式)
public class test
{public static void main(String[] args){int a = 10;long b = 2;b = a;a = (int)b;}
}
依旧是上图,非要把水缸里的水倒进盆子里的强硬做法,确实霸道(强制类型转换,可能会造成数据丢失)
注意:进行强制类型转换不一定会成功,毫不相干的类型是不能相互转换,比如Boolean与int类型转换
类型提升
不同数据类型的运算
public static void main(String[] args) {long a = 10;int b = 10;int c = a+b;//报错}
如图,数据类型小的和数据类型大的运算时,a是long类型属于数据类型大的,b是int类型属于数据类型小的,两者在进行运算时,会把小类型(数据类型小的类型,往后不说了)提升为与大类型,也就是把b的int类型提升为long类型,然后与b进行运算,所以结果就是long类型,但是你用int类型来接收就达咩,所以要这样
public static void main(String[] args) {long a = 10;int b = 10;long c = a+b;}
这样接收值就不会造成数据的丢失,但是你要是非常执着于int类型,对数据不管不顾,就是纯爱int,也可以,要这样
public static void main(String[] args) {long a = 10;int b = 10;int c = (int)(a+b);}
public static void main(String[] args) {long a = 10;int b = 10;int c = (int)a+b;}
玩的就是任性
小于4字节数据类型的运算
public static void main(String[] args) {byte a = 1;byte b = 1;byte c = a+b;//报错}
有宝子就要说呀,为啥么相同类型直接的运算也会报错,这就要提到计算机的读取数据了,通常计算机CPU读取数据会按照4字节为单位来读取,也就是提升为int类型来参与计算
就图而言,a和b因为自己小于4个字节,非常卑微,经过思想教育提升到了4字节来计算,但是你还用个小盆子c来接收int(4字节)这个水缸就不道德了,就会直接报错,但是你非要用水盆子接收也可以,那就强转呗
public static void main(String[] args) {byte a = 1;byte b = 1;byte c = (byte)(a+b);}
累了,写着一个强转吧
异或这样:
public static void main(String[] args) {byte a = 1;byte b = 1;int c = a+b;}
小结:
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
字符串类型
使用String类定义字符串类型
public static void main(String[] args) {String a = "hello";String b = "java";System.out.println(a+b);}
有些情况需要字符串和整型数字直接进行转换,后续会补,这里不展开了捏
运算符
算术运算符
- 基本四则运算符:加减乘除模(+ - * / %)
%可以对整型取模.还可以对double类型取模,但是没有意义,一般是对整型取模
- 增量运算符 += -= *= %=
int a = 4;double b = 5.0;a += b;System.out.println(a);
在这里,a和b的类型分别是int和double。在这个过程中,与a相加,得到的结果强转为int类型是9。由于a的类型是int,所以结果也是int类型。如果你想要得到9.0,你需要将a的类型改为double
- 自增/自减运算符 ++ –
public static void main(String[] args) {int a = 10;a = a++;System.out.println(a);}
与c语言不同,此处java的结果是10,而非11,因为c语言中,a=a++的步骤可以分成a = a;a++;
两步,这样a的值应该是11,但是java结果是10,此处涉及操作表和局部变量表,但是宝子们可以大致这样理解,int temp = a;(保存原始值)
a = a + 1;(执行递增)然后temp的值再赋值给a,所以还是10,
关系运算符
在C语言中,表达式 5 < a < 10 ,C语言中的比较操作符是左关联的,所以这个表达式实际上会被解释为 (5 < a) < 10。由于 (5 < a) 的结果是1(真),因此整个表达式将变成 1 < 10,最终结果是真(1)。
在C语言中,关系运算符的结果是一个整数,要么是1(真),要么是0(假)
然而,在Java中,情况是不同的。Java中的比较运算符是不能被链式使用的,因此 5 < a < 10 这样的表达式在Java中是非法的。
注意:想表达数学表达式5 < a < 10要用(5<a&&a<10)来判断
逻辑运算符
逻辑与&&
语法规则:表达式1 && 表达式2,左右表达式必须是boolean类型的结果。
逻辑或||
语法规则:表达式1 || 表达式2,左右表达式必须是boolean类型的结果。
注意:左右表达式至少有一个为真,则结果为真
逻辑非!
语法规则: !表达式
真变假,假变真
短路求值
public static void main(String[] args) {System.out.println(2<1&&1/0==0);System.out.println(2>1||1/0==0);}
&&运算在第一个错误时,将直接判断错误,不会判断第二个条件,因为不会报错,||则是第一个条件正确后,就直接跳出,不判断第二个条件
public static void main(String[] args) {System.out.println(2<1&1/0==0);System.out.println(2>1|1/0==0);}
如果是&和|就不一样了,他们都会对两个条件进行判断,所以此处会报错
位运算符
按位与&
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
按位或 |
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
按位取反 ~
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
按位异或^
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
移位运算
- 左移 <<: 最左侧位不要了, 最右侧补 0.
- 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
- 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
条件运算符
条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法
相关文章:
图灵日记之java奇妙历险记--数据类型与变量运算符
目录 数据类型与变量字面常量数据类型变量语法格式整型变量浮点型变量字符型变量希尔型变量类型转换自动类型转换(隐式)强制类型转换(显式) 类型提升不同数据类型的运算小于4字节数据类型的运算 字符串类型 运算符算术运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非…...
PhysX——源码编译
从git下载源码 git主页 https://github.com/NVIDIA-Omniverse/PhysXclone地址 https://github.com/NVIDIA-Omniverse/PhysX.git源码编译 运行PhysX需要两个编译器的支持,CMake 3.12 或以上版本以及Python 2.7.6 版本 进入工程的 physx 目录,运行generate…...
小鹅通基于 TSE 云原生 API 网关的落地实践
导语 2023腾讯全球数字生态大会已于9月7-8日完美落幕,40专场活动展示了腾讯最新的前沿技术、核心产品、解决方案。 微服务与消息队列专场,我们邀请到了小鹅通的基础架构组负责人黄徐震为我们带来了《小鹅通基于 TSE 云原生网关的落地实践》的精彩演讲。…...
Postgresql处理JSON类型中替换某个属性值问题
一、问题描述 使用postgresql对json的特性使用sql批量处理json中某个属性的值 结构如下: {"id": 1,"parentId": 123,"globalParameters": [{"value": "date","boardId": 123,"canReName":…...
@德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
德人合科技 | 天锐绿盾加密软件是一款全面保障企业电脑数据和安全使用的加密软件 PC端访问地址:www.drhchina.com 它的功能包括但不限于: 实时操作日志:可以实时详细地记录所有终端的操作日志,包括终端上窗口标题的变换、程序的…...
android 使用GSON 序列化对象出现字段被优化问题解决方案
一、问题描述 有以下结构: public class NativeParam<T> {private T data;public NativeParam(T data) {this.data data;}public T getData() {return data;}public void setData(T data) {this.data data;} };NativeParam<String> data "1.0…...
进入不了Bios?进入Bios的方法都在这了,肯定能进!
前言 有些小伙伴可能在重装系统的第一步就卡住了,接着就放弃了。哇哈哈哈啊,先让小白笑会~ 根据小白十二年的装机经验,不同主板进入Bios的时候有不同的姿势。也许要蹲着大喊Bios才能进入呢?要不试试? 好了…...
手把手教你基于 FastGPT 搭建个人知识库
前言 大家好,我是潇潇雨声。我发现在使用 GPT 时,尽管它能够生成一些小红书文案和日志,但内容常常显得空洞缺乏深度。今天我想分享一个解决这个问题的方法,那就是基于开源项目 FastGPT[1]。 我们可以通过向 GPT 提供一些有针对性的…...
gitee 怎么添加SSH密钥
要在Gitee上添加SSH密钥,请按照以下步骤操作: 登录到Gitee账户并导航到您要添加SSH密钥的存储库页面。点击页面右上方的“设置”按钮。在设置页面中,选择“SSH公钥”选项卡。点击“添加密钥”按钮。在弹出的对话框中,输入密钥标题…...
万界星空开源MES/注塑MES/开源注塑MES/免费MES/MES源码
一、系统概述: 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES、好看的数据大屏、功能齐全开源mes. 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理,车间基础数据管理&…...
macOS 开发 - MASShortcut
文章目录 关于 MASShortcut项目结构 快速使用源码学习检测是否有热键冲突处理 Event macOS 开发交流 秋秋群:644096295,V : ez-code 关于 MASShortcut MASShortcut 是一款快捷键管理工具,替代和兼容 ShortcutRecorder github : https://git…...
【大数据面试】Flink面试题附答案
目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度? ✅什么是算子链? ✅什么是任务槽(Task Slots)? ✅任务槽和并行度的关系 ✅Flink作…...
语音识别之百度语音试用和OpenAiGPT开源Whisper使用
0.前言: 本文作者亲自使用了百度云语音识别,腾讯云,java的SpeechRecognition语言识别包 和OpenAI近期免费开源的语言识别Whisper(真香警告)介绍了常见的语言识别实现原理 1.NLP 自然语言处理(人类语言处理) 你好不同人说出来是不同的信号表示 单位k 16k16000个数字表示 1秒160…...
Rust报错:the msvc targets depend on the msvc linker but `link.exe` was not found
当我在我的 windows 电脑上安装 rust,然后用 cargo 新建了一个项目后,cargo run 会报错: error: linker link.exe not found| note: program not foundnote: the msvc targets depend on the msvc linker but link.exe was not foundnote: p…...
2312llvm,04后端上
后端 后端由一套分析和转换趟组成,任务是生成代码,即把LLVM中间(IR)转换为目标代码(或汇编). LLVM支持广泛目标:ARM,AArch64,Hexagon,MSP430,MIPS,NvidiaPTX,PowerPC,R600,SPARC,SystemZ,X86,和XCore. 所有这些后端共享一套,按通用API方法抽象后端任务的目标无关生成代码的一部…...
springboot学习笔记(五)
MybatisPlus进阶 1.MybatisPlus一对多查询 2.分页查询 1.MybatisPlus一对多查询 场景:我有一个表,里面填写的是用户的个人信息(姓名,生日,密码,用户ID)。我还有一个表填写的订单信息&#x…...
文件上传——后端
文件上传流程: 创建阿里云OSS(对象存储服务)的bucket 登录阿里云,并完成实名认证,地址:https://www.aliyun.com/. 可以通过搜索,进入以下页面: 点击立即使用后: 点击…...
虾皮开通:如何在虾皮上开通跨境电商店铺
在当今的数字时代,跨境电商已经成为了全球贸易的一种重要形式。虾皮(Shopee)作为东南亚市场份额第一的跨境电商平台,为卖家提供了广阔的销售机会。如果您想在虾皮上开通店铺,以下是一些步骤和注意事项供您参考。 先给…...
C语言—每日选择题—Day60
明天更新解析 第一题 1. 下列for循环的循环体执行次数为() for(int i 10, j 1; i j 0; i, --j) A:0 B:1 C:无限 D:以上都不对 答案及解析 A for循环的判断条件是 i j 0;赋值语句做判断条件…...
【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建
系列文章目录 题目:Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文:https://arxiv.org/pdf/2304.06714.pdf 任务:无条件3D生成(如从噪音中,生成不同的车等)、…...
计算机网络:应用层
0 本节主要内容 问题描述 解决思路 1 问题描述 不同的网络服务: DNS:用来把人们使用的机器名字(域名)转换为 IP 地址;DHCP:允许一台计算机加入网络和获取 IP 地址,而不用手工配置࿱…...
现代雷达车载应用——第3章 MIMO雷达技术 3.2节 汽车MIMO雷达波形正交策略
经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 3.2 汽车MIMO雷达波形正交策略 基于MIMO雷达技术的汽车雷达虚拟阵列合成依赖于不同天线发射信号的可分离性。当不同天线的发射信号正交时&#x…...
Unresolved plugin: ‘org.apache.maven.plugins‘解决报错
新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…...
阿里云林立翔:基于阿里云 GPU 的 AIGC 小规模训练优化方案
云布道师 本篇文章围绕生成式 AI 技术栈、生成式 AI 微调训练和性能分析、ECS GPU 实例为生成式 AI 提供算力保障、应用场景案例等相关话题展开。 生成式 AI 技术栈介绍 1、生成式 AI 爆发的历程 在 2022 年的下半年,业界迎来了生成式 AI 的全面爆发,…...
从0开始学Git指令
从0开始学Git指令 因为网上的git文章优劣难评,大部分没有实操展示,所以打算自己从头整理一份完整的git实战教程,希望对大家能够起到帮助! 初始化一个Git仓库,使用git init命令。 添加文件到Git仓库,分两步…...
B039-SpringMVC基础
目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介 1.Sprin…...
Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)
文章目录 Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)1、正确的运行页面2、报错404问题分类解决2.1、Tomcat未配置环境变量2.2、IIs访问权限问题2.3、端口占用问题2.4、文件缺少问题解决办法: Tomcat报404问题解决方案大全(包括tomcat可以正常运…...
debian10安装配置vim+gtags
sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境! - 知乎...
vue跳转方式
Vue的页面跳转有两种方式,第一种是标签内跳转,第二种是编程式路由导航 1. <router-link to/Demo><button>点击跳转1</button> </router-link>2.router.push("/Demo");一、标签内通过 router-link跳转 通常用于点击 …...
基于ssm+jsp学生综合测评管理系统源码和论文
网络的广泛应用给生活带来了十分的便利。所以把学生综合测评管理与现在网络相结合,利用java技术建设学生综合测评管理系统,实现学生综合测评的信息化。则对于进一步提高学生综合测评管理发展,丰富学生综合测评管理经验能起到不少的促进作用。…...
网站建设难么/短视频广告投放平台
MD5对一个东西加密 可以认为是不可还原的 1.客户端加密 服务端看md5是不是和数据库一致 2.服务端加密 再看和db是否一致 1的情况 网络传的是md5 2 传密码 post是怎么加密的? 有的时候 我们需要和flash交互 这就涉及到数据的交互 flash给我们提交数据 我们往处理后…...
做网站顺序/关键词分析工具
接着上节继续学习,在本章中,你将从网上下载数据,并对这些数据进行可视化。网上的数据多得难以置信,且大多未经过仔细检查。如果能够对这些数据进行分析,你就能发现别人没有发现的规律和关联。我们将访问并可视化以两种…...
做网站基础教程/最好的网络营销软件
东莞数控机床上加工模具 编程时,应该遵守编程的工艺流程,否则极容易出现错误。首先需要分析图纸、编写 工艺卡等,接着需要编写模具的加工程序,然后将程序输入到数控机床,最后进行程序检 验和切试。 (1&am…...
外贸公司的网站建设/网络营销师有前途吗
文字有点长,对于不想看文字的朋友,可以去这里看视频,内容和这个文字一样的,视频可能更好理解https://www.piqizhu.com/v/rmpdkwBdQV5前面的课程里,我们已经知道了 什么是面向对象,以及面向对象的几个特征本…...
做衬衣的网站/百度手机软件应用中心
点击查看:基于Matlab蚁群算法三维路径规划 文件大小:1.85M 源码说明:带中文注释 开发环境:Matlab2016、2018 简要概述 基于Matlab蚁群算法三维路径规划,可以自动寻找最佳路径...
网站显示结算/自助建站系统源码
前言:前面讲完了一些并发编程的原理,现在我们要来学习的是线程之间的协作。通俗来说就是,当前线程在某个条件下需要等待,不需要使用太多系统资源。在某个条件下我们需要去唤醒它,分配给它一定的系统资源,让…...