当前位置: 首页 > news >正文

day2 数据类型和转换以及运算符

嗷~~~~~k,今天强度不是很大,大部分和c++很相似

首先,你变量命名之后最好是先初始化一下,如果你没初始化,他在用到的时候才会给你报错说你没初始化,你不用到他他是不报错的。

一.Java数据类型的两大类型

1.基本数据类型 2.引用数据类型(没细看,但是看着和c++的指针差不多,明天会学

基本数据类型

基本数据类型有四个类:整数类型、浮点数类型、字符类型、布尔类型

整数类型有:byte、short、int、long

浮点数类型:float、double

字符类型:char

布尔类型:boolean(c++就是bool,这个看着多舒服

这里就是十个关键字:包括true和false,全都是关键字

基本数据类型详解

1)byte 一个字节(8位),表示范围-128~127

2)short 两个字节(16位),表示范围-2^8~2^8-1

3) int 四个字节(32位),表示范围-2^16~2^16-1

4)long 八个字节(64位),表示范围-2^32~2^32-1,赋值的时候后面要加个L,小写l会提醒你,很烦

注:要这么多整数型整这么多类型干啥:因为占用存储空间不同,可以更好的节省空间

进制问题:目前学到的有二进制(0b01101),八进制(076543210),十进制(987465321),十六进制(0XFEDCBA)

5)float 四个字节(32位),单精度(为啥叫单精度嘞)这个范围太大,符号位一位,阶码有八位,尾数23位,小数点可以右移2^8位,表示范围比long都大,赋值的时候后面要加一个f

float的一些特殊值:0x7f800000(阶码全1,符号位0,尾数全0)代表infinity正无穷

0xff800000(阶码全1,符号位1,尾数全0)代表--infinity负无穷

0x7f810000(阶码全1,符号位0,尾数非0)代表NaN not a number,不是一个数

0x00000000(阶码全0,符号位0,尾数全0)代表正0.0

0x80000000(阶码全0,符号位1,尾数全0)代表负0.0

6)double 八个字节(64位),双精度,符号位1位,阶码11位,尾数52位,小数点可以右移2^11位,表示范围超级大

7)char 两个字节(16位),无符号,是用一种unicode编码(一种独特编码方式吧)"\u0000",表示范围就是从0~2^16-1,赋值有个特殊情况就是转义字符\,要(char a = '\\')才能赋值成功

\转义字符 \t制表符 \n换行 \r回车 \\ \字符

8)boolean 只有true和false,不可以进行任何类型的数据转换

下面是关于他们的默认值

整数型的默认值是0,float的默认值是0.0f,double的默认值是0.0,char的默认值是"\u0000",不是

" ",boolean的默认类型是false,到目前为止,他们的默认值无甚作用(因为变量得初始化),搜了一下,后面的类的成员变量这个就有用了

还有他们的默认类型

整数的默认类型是int ,浮点数的默认类型是double

因此在执行

long a = 1000000000;

会报错,因为1000000000是默认int类型,但是int类型无法表示这个值,属于是溢出,所以要在1000000000后加个L表示这个整数时long类型才能正确赋值,如下

long a = 1000000000L;

同理 float a = 2.2;同样为错,因为2.2默认是double类型,double无法向范围比自己低的转,隐式转换都是低转高,除非强转(接下来就是类型转换),而强转又可能导致精度损失等一系列问题

,因此正确赋值应该是float a = 2.2f;

类型转换:

1)隐式类型转换:即默认类型转换,通常都是表示范围低的向表示范围高的转换

优先级:double > float > long > int > short > byte

比如 byte a = 11;

int b = a;

这个就属于隐式转换

2)显示类型转换(强制类型转换):表示范围高的向表示范围低的转换

当表示范围不够的时候就按照二进制从低位到高位取,多余的丢掉,然后表示比如

int i = 128; //二进制1000 0000

byte j = (byte)i;//j = -128

二.运算符以及表达式

运算符的类型

算数运算符,逻辑运算符,比较运算符,位运算符,赋值运算符,三元运算符,一元运算符

1.算数运算符

+ - * / % 这个应该没啥东西吧应该

奥,12/3.0结果的类型是double,即计算结果的类型与范围更大的相同

还有

//整数类型的表达式的结果一定是int类型,一旦有long类型参与结果一定是long类型 byte byteA = 1; byte byteB = 1; //byte byteC = byteA+byteB;//运算结果是int类型,不能赋值给byteC byte byteC = (byte) (byteA+byteB);//运算结果是int类型,不能赋值给byteC,强转为byte int a = byteA + 1l;//运算结果是long类型,不能赋值给a int a = (int)(byteA + 1l);//运算结果是long类型,不能赋值给a,强转为int

这个地方得多品两下,为什么两个byte类型的变量和为int类型

Java的整数运算默认会将byte、short和char类型的操作数提升为int类型进行计算

还有

a=1;b=2; result = a%b;//result为正 System.out.println(result); a=-1;b=2; result = a%b;//result为负 System.out.println(result); a=1;b=-2; result = a%b;//result为正 System.out.println(result); a=-1;b=-2; result = a%b;//result为负 System.out.println(result); //a%b结果的正负取决于a的正负

算数结果的正负由%左边的数的正负决定

2.比较运算符

> < >= <= == !=

==在比较大小的时候比较的是数值大小,和类型无关,0与0.0相同float中的特殊值-0.0与0.0相同,都返回true

3.逻辑运算符

&& || !

这个的话要注意&&与||的短路现象

&&的话是只要左边结果为false,那这个结果就固定为false了,右边的逻辑运算就不运行了,导致短路

||是只要左边结果为true,那么这个结果就固定为true了,右边的逻辑运算就不会运行,导致短路

!的作用:比如你要验证一个文件是否存在,如果不存在,你就要创建一个这个文件,前面就要加个!

还有isEmpty() 判断容器是否为空,空为true,不空为false,如果不为空那就要清空

4.位运算符

&按位与 |按位或 ^按位异或 ~按位取反(符号位也取反 <<左移,补0 >>右移补符号位 >>>无符号右移,符号位也要移动,补0

5.赋值运算(优先级最低)

= += *= /= %=

奥,不能过

a += 2;为数值的累加而非简单的a = a + 2;

eg:

byte a = 0;

a = a + 2;会报错,因为a+2返回的是int类型的值,而a为byte类型的值,无法赋值

而a +=2;就弥补了这个短板,他就能运行

6.三元运算

作用:取值

写法int a = A>B(逻辑运算) ? num1(值1) : num2(值2);

boolean 表达式?A值:B值

7.一元运算符

++ --

自增自减

a++,++a理解为一个表达式

a++是先将a的值给a++这个表达式,再执行a+1操作

++a是先执行a+1操作,再将a的值给++a这个表达式

问题

1.为什么a=0 ;a = a++;结果为a=0

int a = 0;

a = a++;执行完后a的值为0,按照操作来,赋值的优先级最低,则先计算a++这个表达式,那么a的值先给a++这个表达式,再去执行a+1,此时a = 1。然后执行a = a++(表达式的值)此时a++表达式的值为0,则运算结束后a为0。

int a= 0 ;

a = ++a; 执行完后a的值为1, 赋值优先级最低,先算++a这个表达式,按照++a的逻辑,先a+1,此时a的值为1,再将a的值给++a表达式,则++a值为1,然后赋值a = ++a;则运算结束后a为1。

这里得多品两下

2.什么是短路

我的理解:短路就是一个比较运算等啥运算出现在一个逻辑运算右边且不被执行的情况。

搜的:

在 Java 中,短路与(&&)和短路或(||)是常用的逻辑运算符。它们的特点是当第一个操作数已经足以确定整个表达式的值时,后面的操作数将不会被计算,从而提高了程序的效率。

出现原因:&&和||执行的特性,当出现一个必然结果时他就不会继续向下进行逻辑运算了,比如&&左边出现了false,则结果必定为false,&&右边就没必要运算了

||左边出现了true ,则结果必定为true,||右边也没必要算了

此时右边的比较运算等就被短路了(和物理学的短路很像

3.什么是类型转换

我用我自己的话说不太明白这个概念,我认为是将一个数据类型变为另一个数据类型,在网上搜了一个

Java数据类型转换是将一个数据类型的值转换为另一个数据类型的值的过程

我觉得没毛病,然后再引申一下,两种转换方式,显式和隐式,隐式就是自动转换(默认是表示范围小的转成表示范围大的,显示就是强转,强转可能会导致转前和转后值不相等或精度缺失的情况。

值不相等的话就是int转byte啥的,int二进制的数值位可能会变成byte二进制的符号位

精度缺失就是浮点数转整型时普遍出现的问题。

今天就细扣了这些东西,感觉还是太慢了

哎,写了很多,但感觉基础东西还是偏多,距离面向对象还十分遥远,Java后端道路艰难坎坷呀

http://www.jsqmd.com/news/500440/

相关文章:

  • 储能数字孪生案例_国产三维可视化软件实践
  • 天梯赛L2题解(001-004)
  • 毕设程序java邯郸高铁服务系统 燕赵门户·邯郸智慧轨道交通服务平台 基于SpringBoot的区域高铁综合服务管理系统
  • 海尔小程序逆向分析
  • 大润发购物卡回收变现靠谱吗? - 团团收购物卡回收
  • SpringAI如何接入阿里云百炼大模型?
  • sa考勤表自动统计 工具开发需要解决的问题
  • 重卡换电站全解析:技术分类、核心构成与落地应用大盘点
  • 数字化时代,企业的商业模式建设
  • 机票改签怎么收费?写给第一次坐飞机的你,改签操作与费用全攻略
  • 2025-2026年充电桩厂家推荐:重卡物流园区大功率快充可靠品牌与投资回报分析 - 十大品牌推荐
  • 发动机制造商如何选择缸盖供应商?2026年靠谱推荐满足严苛技术标准工厂 - 十大品牌推荐
  • 手把手教你如何用大润发购物卡快速变现,回收流程详解! - 团团收购物卡回收
  • 吐血整理!100个网络安全基础知识详解,零基础入门到精通,看完少走弯路(赶紧码住)
  • 有问必答!化工泵的效率是多少,有效功率是什么意思?
  • 云原生安全实战:如何在 K8s 集群中为 Ingress 开启 HTTPS 绿锁?
  • 谷歌DeepMind发布AGI评估框架,开启通用智能评测新时代
  • 2026年发动机缸盖工厂推荐:动力总成升级关键部件口碑好工厂与实力分析 - 十大品牌推荐
  • 2025-2026年充电桩厂家推荐:全球市场出海合规产品与技术支撑服务汇总 - 十大品牌推荐
  • 【无标题】嵌入式控制器原理及应用——STM32微控制器开发工具
  • 不必远行,武汉家门口的徒步路线,美到不想停
  • 北京宠物寄养哪家好?盘点专业正规、条件服务优质的宠物寄养机构 - 品牌2026
  • Nature新风口:PINN+知识蒸馏!思路学好转头就发顶会,新组合就是好上分
  • 2026年想在成都找家靠谱的GEO外包公司?要注重这几个要点 - 红客云(官方)
  • IOP-JPCS出版|EI会议2026年计算力学与智能系统国际学术会议(CMSS 2026)
  • 嵌入式春招笔试高频算法题(附解题思路)
  • 输入题目,输出高质量开题初稿——百考通AI让研究起点更稳!
  • 2026年发动机缸盖工厂推荐:全球化供应链体系下优质合作伙伴选择指南分析 - 十大品牌推荐
  • 前缀和算法 cpp
  • 5分钟本地跑起大模型