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

这篇具有很好参考价值的文章主要介绍了图灵日记之java奇妙历险记--数据类型与变量&&运算符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据类型与变量

字面常量

看下面这个栗子,宝子们

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类型的结果。
图灵日记之java奇妙历险记--数据类型与变量&&运算符,java,java,开发语言

逻辑或||

语法规则:表达式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 中唯一的一个 三目运算符, 是条件判断语句的简化写法文章来源地址https://www.toymoban.com/news/detail-761237.html

到了这里,关于图灵日记之java奇妙历险记--数据类型与变量&&运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5(6.1)学习历险记

    yolov5整体结构可以分成backbone(骨干网),neck(颈部),head(检测头)三个部分,其中在yolov5.yaml配置文件中neck和head写在了一个部分。 backbone: 进行特征提取。常用的骨干网络有VGG,ResNet,DenseNet,MobileNet,EfficientNet,CSPDarknet 53,Swin Transformer等。(其中yolov5s采用CSPDarknet

    2024年02月08日
    浏览(50)
  • 数通王国历险记之地址分析协议(ARP)

    目录 前言 一,什么是地址解析协议(ARP)  二,封装和解封装 三,为什么需要地址解析协议(ARP)  四,ARP的验证实验 4.1,先创建拓扑结构: 4.2,配置PC1和路由器 4.3,我们先开始进行抓包 4.4,抓包结果 4.5,总结ARP协议 五,ARP的工作原理 5.1  5.2 5.3 5.4 总结 随着华为公司

    2024年02月13日
    浏览(94)
  • 【C++历险记】国庆专辑---探索多态迷宫的代码之旅

    🎉博客主页:.小智 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++终极篇 🎉代码仓库:小智的代码仓库 多态多态顾名思义就是多种形态,比如我们要完成某一件事情,不同的对象去完成,我们产生的结果是不一样的。 举个栗子我们平时的买火车票,就有这几种分

    2024年02月08日
    浏览(39)
  • 【C++历险记】面向对象|菱形继承及菱形虚拟继承

    个人主页:兜里有颗棉花糖💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 单继承:一个子类 只有一个直接父类 时称这个继承

    2024年02月10日
    浏览(42)
  • 振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(9)

    注解目录 1、znFAT 的起源 1.1 源于论坛 (那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。) 1.2 硬盘 MP3 推了我一把 (“坤哥”的硬盘 MP3 播放器,让我深陷 FAT 文件系统不能自拔。) 1.3 我的导师-- 顾国昌教授 (哈军工时期的老教授,德高望重的人生导师

    2024年02月03日
    浏览(44)
  • Hadoop历险记(七 Hive配置和启动hiveservice2服务)

    之前讲了hive的元数据,它存储着hiveSQL映射和hdfs具体文件数据的对应关系。 但是元数据存在单独的mysql中 直接将它暴露给外部是不安全的,所以hive特别增加了一个元数据服务。 它作为元数据和外部客户端之间的一个中间人。 metastore有三种服务配置模式 同时也可以说这是h

    2024年02月03日
    浏览(44)
  • 前台测试转后台优化历险记,应届生薪资8K逆袭,从此扶摇直上九万里!

    优橙教育每一期都会有不少从前台测试转到后台的小伙伴应邀而来,其实每个人的经历都是大致相同的,这时候肯定会有很多小伙伴问,为什么出来花钱出来参加培训而不是在项目上转呢? 或许是因为在项目上摸爬滚打太久了,吃不下领导画的大饼了;也或许是因为确实整天

    2024年02月13日
    浏览(50)
  • 数通王国历险记之TCP协议的三次握手和四次挥手

    目录 前言  一、TCP我们称之为可靠的传输层协议,为什么称它为可靠呢? 二、TCP的建立——三次握手 1,提前知道TCP协议报文中都有些啥? 2.第一次握手 总的来说:就是PC1向PC2发出一个同步报文说,我想和你建立连接 3,第二次握手 总的来说:就是PC2同意和PC1建立连接,同时确

    2024年02月11日
    浏览(44)
  • K8S历险记-从零开始kubeadm单机安装部署k8s保姆级教程

    1.查看系统版本信息以及修改配置信息 1.1 查看cpu信息 k8s安装至少需要2核2G的环境,否则会安装失败 1.2 安装k8s时,临时关闭swap ,如果不关闭在执行kubeadm部分命令会报错 1.3 安装k8s时,可以临时关闭selinux,减少额外配置 1.4 关闭防火墙 1.5 设置网桥参数 1.6 修改hosts文件

    2024年02月08日
    浏览(54)
  • 【BUG历险记】vivado报错:binding vhdl entity ‘ xxxxx ‘does not have port ‘ xxxxx ‘解决方案

    🏔【BUG历险记】 vivado报错:binding vhdl entity xxxxx \\\' does not have port \\\' xxxxx \\\'解决方案 我在编写雷达的脉冲压缩仿真时,先例化了FFT和复数乘法器,并仿真验证通过了;再例化IFFT,结果仿真时出现错误,前面仿真通过的复数乘法器报错。说是没有aclk引脚,实际上是有的。 更改代

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包