图灵日记之java奇妙历险记--数据类型与变量运算符

目录

  • 数据类型与变量
    • 字面常量
    • 数据类型
    • 变量
      • 语法格式
      • 整型变量
      • 浮点型变量
      • 字符型变量
      • 希尔型变量
      • 类型转换
        • 自动类型转换(隐式)
        • 强制类型转换(显式)
      • 类型提升
        • 不同数据类型的运算
        • 小于4字节数据类型的运算
    • 字符串类型
  • 运算符
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
      • 逻辑与&&
      • 逻辑或||
      • 逻辑非!
      • 短路求值
    • 位运算符
      • 按位与&
      • 按位或 |
      • 按位取反 ~
      • 按位异或^
    • 移位运算
    • 条件运算符

数据类型与变量

字面常量

看下面这个栗子,宝子们

System.out.println("cheer up!!!");

输出的"cheer up!!!"就是字面变量

字面常量的值在程序的整个生命周期中是不变的
字面常量的分类:
字符串常量
整形常量
浮点数常量
字符常量
布尔常量:只有两种true和false
空常量
注意:字符串,整形,浮点型,字符型以及布尔型,在java中都被叫作数据类型

数据类型

java中数据类型主要分为两类:基本数据类型和引用数据类型
基本数据类型有四类八种:

  1. 四类:整型、浮点型、字符型以及布尔型
  2. 八种:
    字节型 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);}

有些情况需要字符串和整型数字直接进行转换,后续会补,这里不展开了捏

运算符

算术运算符

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

%可以对整型取模.还可以对double类型取模,但是没有意义,一般是对整型取模

  1. 增量运算符 += -= *= %=
		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

  1. 自增/自减运算符 ++ –
    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.

移位运算

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

条件运算符

条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法

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

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

相关文章

为什么越来越多公司开始用低代码开发?

时代洪流的走向&#xff0c;我们无法左右&#xff0c;能够把握的&#xff0c;只有做好自己。如何在寒冬来之不易的机会中&#xff0c;生存并且壮大。 不知道大家有没有发现&#xff0c;今年的低代码赛道异常火热&#xff0c;但火热的背后才值得思考&#xff0c;市场需求持续被挖…

简单的图片跑马灯效果

效果展示&#xff1a;gif 因速度太快展示不够流畅 实现方式 <div class"banner"><img class"img1" :src"image" v-for"(image, index) in imgs" :key"index" /></div><div class"banner"&…

15个热门的开源数据可视化项目

数据可视化(即 BI仪表盘)是图形表示的数据。它涉及产生将表示的数据之间的关系传达给图像查看者的图像。这种通信是通过在可视化过程中使用图形标记和数据值之间的系统映射来实现的。该映射建立了如何在视觉上表示数据值,确定图形标记的属性(例如大小或颜色)如何以及在多大程…

Modbus-TCP数据帧

Modbus-TCP基于4种报文类型 MODBUS 请求是客户机在网络上发送用来启动事务处理的报文MODBUS 指示是服务端接收的请求报文MODBUS 响应是服务器发送的响应信息MODBUS 证实是在客户端接收的响应信息 Modbus-TCP报文: 报文头MBAP MBAP为报文头&#xff0c;长度为7字节&#xff0c…

微服务与人工智能技术的融合

随着人工智能技术的快速发展&#xff0c;越来越多的企业开始关注微服务架构与人工智能技术的结合&#xff0c;以期在市场竞争中获得更大的优势。本文将深入探讨微服务架构与人工智能技术融合的优势、挑战&#xff0c;以及实现这一融合的最佳实践和方法。 首先&#xff0c;让我们…

RflySim | 姿态控制器设计实验三

RflySim | 姿态控制器设计实验三 一.分析实验 1.调节PID控制器相关参数以改善控制性能并记录超调量和调节时间&#xff0c;得到一组恰当参数&#xff1b; 2.使用调试后的参数&#xff0c;对系统进行扫频以绘制Bode图&#xff0c;观察系统幅频响应,相频响应曲线&#xff0c;分…

自媒体人福音,正版实用的视频素材网站~

大家平时在创作视频的时候&#xff0c;有没有苦恼过找不到合适的素材呢&#xff1f;网上能找到的大部分素材都是有版权的&#xff0c;不能随便乱用。今天我就来给大家推荐一些用于视频创作的正版素材网站&#xff0c;快快收藏吧! 1.制片帮素材 链接&#xff1a;stock.zhipianb…

玩转Instagram Shop只需要学会这些功能

Instagram Shop作为Instagram下属的电商购物平台。用户可以通过浏览Instagram上的推荐产品和品牌&#xff0c;在无需离开应用的情况下了解并购买新的商品。对于经常使用Instagram的用户来说是个很便捷的购物渠道。面对这个新渠道&#xff0c;我们又该如何玩转它呢。这篇文章就会…

crontab+shell脚本实现数据库定时备份

在工作场景中我们经常会遇到定时备份数据库的需求&#xff0c;这里写一个案例使用crontabshell脚本实现。 1. 实现目标 要求每天凌晨12点备份test数据库&#xff0c;并且将备份文件放到/home/mysql_backup目录下&#xff0c;文件名为backup_数据库名.年-月-日.sql.gz 2. 脚本…

Linux线程

文章目录 线程线程原理页表线程VS进程线程相关函数pthread_create函数pthread_selfpthread_exitpthread_cancelpthread_joinpthread_detach 线程ID 线程 什么是线程&#xff1f;为什么要有线程&#xff1f; 线程本质上就是轻量化的进程&#xff0c;一个进程就是一个执行流&…

WiFi+蓝牙物联网定制方案——五大核心难点

WiFi蓝牙物联网定制方案可以根据具体需求进行定制&#xff1a; 1、设备连接方案&#xff1a;采用WiFi和蓝牙技术&#xff0c;将物联网设备与智能手机、平板电脑等设备进行连接&#xff0c;实现数据传输和远程控制。 2、数据传输方案&#xff1a;通过WiFi和蓝牙技术&#xff0c;…

云上荆楚丨云轴科技ZStack成功实践精选(湖北)

湖北自古以来有九省通衢的美称&#xff0c;地处长江中游&#xff0c;富有荆楚之美誉&#xff0c;灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发&#xff0c;计划到“十四五”末&#xff0c;数字经济核心产业增加值力争达到7000亿元&#xff0c;占GDP的比重超过12%。…