初识Java:数据类型与变量、运算符

news2025/1/11 20:50:06

哈喽大家好,这篇文章我将为大家分享关于Java的数据类型与变量和运算符。

文章目录

  • 数据类型与变量
    • 数据类型
      • 整型类型
        • byte类型
        • short类型
        • int类型
        • long类型
      • 浮点型
      • 字符类型
      • 布尔类型
    • 变量
      • 浮点型变量
      • 布尔型变量
      • 类型转换
        • 隐式转化
        • 显式转化
  • 运算符
    • 算术运算符
    • 增量运算符
    • 自增/自减运算符
    • 关系运算符(比较简单,不过多解释)
    • 逻辑运算符
      • &&
      • ||
    • 位运算符
      • &按位与操作符
      • | 按位或操作符
      • ^ 按位异或操作符
      • ~ 按位取反
    • 移位操作符
      • << 左移操作符
      • >>右移操作符
      • >>>无符号右移

数据类型与变量

数据类型

在Java中数据类型分为基本数据类型与引用数据类型,今天我们着重讲解基本数据类型。

基本数据类型又分为整型、浮点型、字符型以及布尔类型,我们来看下面的一张表。
在这里插入图片描述

整型类型

byte类型

byte类型的大小是1个字节,它所能表示的范围是-128~127,这个范围我们可以用一段代码来知道。

System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);

在这里插入图片描述

这里Byte是byte类型的包装类,我们现在还不需要细究,知道可以这样用就可以了。

short类型

short类型的大小是2个字节,可以表示-2^15 ~ 2^15-1,也就是-32768 ~ 32767

System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);

在这里插入图片描述

int类型

int类型的大小是4个字节,可以表示-2^31 ~ 2^31-1,
-2147483648 ~ 2147483647范围的数字。

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

在这里插入图片描述

long类型

long类型的大小是8个字节,可以表示-2^63 ~ 2^62-1,
-9223372036854775808 ~ 9223372036854775807范围的数字。

System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);

在这里插入图片描述

在这里大家可能会问了,大家都是学过c语言的,那么为什么没有long long类型呢?并且在C语言中,为什么int的类型的大小有的时候是4个字节,有的时候是8个字节呢?在Java中int类型到底是几个字节呢?

在Java中是没有long long类型的,因为Java中的long类型就是8个字节,并且在Java中int类型始终是4个字节,不会出现一会是4个字节,一会是8个字节。

浮点型

Java中浮点型跟C语言中的浮点型是一样的,浮点型分为float类型和double类型,float类型的大小是4个字节,double类型的大小是8个字节,浮点型也有表示的范围,但是我们一般不关注。

字符类型

Java中的字符类型char跟C语言的char类型的差别是很大的,因为在C语言中,cahr类型的大小是1个字节,而在Java中char类型的大小是2个字节,而我们的汉字也是两个字节,也就是说:在Java中我们可以用char来存储汉字。比如说:

char c = '好';

char类型表示的范围是:0~65535,那么为什么不是-32768 ~ 32767呢?因为在Java中使用的是Unicode编码,来表示中文字符。
我们用代码来看看

System.out.println(Character.MIN_VALUE);
System.out.println(Character.MAX_VALUE);

在这里插入图片描述

布尔类型

布尔类型的大小是不确定的,他所表示的范围有且仅有false和true。

变量

什么叫变量呢?
变量是指在Java程序中可以经常改变的量,而这些变量就是用数据类型来定义的。

定义变量的格式是:数据类型 变量名 = 初始值

我们在定义变量的时候要注意变量的值不能超过数据类型所i能表示的范围,例如:Byte a = 128;这样就不行,编译器会报错的。

在定义变量的时候我们需要稍加注意的是当我们定义长整型和float类型的时候,我们可以稍加修饰。Long b = 100L,我们在数字后面加上l或者L来区分int跟long类型,float c = 1.0f,在定义float类型的数据时,我们需要在后面加上f或者F,否则编译器会把这个数据当成double类型,编译器会报错。

我们着重看一下浮点型变量和布尔型变量。

浮点型变量

int a = 3;
int b = 2;
System.out.println(a/b);

这段代码的输出结果是什么呢?1.5?我们来看看
在这里插入图片描述
在Java和C语言中都有这个效果,就是如果/两边的数都是整数的时候,他的出来的结果也一定是整数,他的结果是整除的结果,那么我们要想得到1.5该怎么办呢?我们需要转化为浮点数之间的除法。

double a = 30;
double b = 2.0;
System.out.println(a/b);

在这里插入图片描述

double a = 3.0;
int b = 2;
System.out.println(a/b);

在这里插入图片描述
这样写也是可以的出来1.5的,因为在计算的时候int类型会自动转化为double类型。

布尔型变量

布尔型变量就两只有两个值false和true,并且在Java中与C语言不同的是,在C语言中我们可以这样写:

int i = 10;
while(i)
{
    System.out.println("我好帅");
    i--;
}

但是我们在Java中这样写会报错,因为在Java中没有所谓的0为假false,非0为真true,Java中只能用true表示真,false表示假,我们只能这样写:

int i = 10;
while(i>0)
{
    System.out.println("我好帅");
    i--;
}

类型转换

类型不总是不变的,他也会发生变化,例如:

int a = 10;
Long b = 0L;
b = a;

隐式转化

这里a会自动转化成long类型,因为b是long类型的变量long类型的变量比int类型的变量大,所以a会自动转化为long类型,然后再赋值给a,这种转化称为隐式转化,而隐式转化还有一种。

Byte a = 10;
Byte b = 20;
Byte c = 0;
c = a+b;

这段代码,编译器会报错,因为编译器有这样的一个原理,就是在计算的时候会将小于4个字节的数据提升为4个字节的数据,也就是说a和b会先发生整型提升,然后在进行计算,然后将int类型的值赋值给byte类型的变量会报错,所以这种隐式转化我们一定要注意。

显式转化

显式转化就是我们通过这样的形式
(类型)数据,例如:(int)13.14,这里我们就将13.14强制类型转化成了int类型,在强制类型转化的过程中可能会发生数据的丢失,在这里会将小数点后面的数据丢失。

不一定所有的强制类型转化都能成功,不同的类型之间不能发生类型转化,例如:

boolean a = false;
int b = (int)a;

这种编译器会报错的,类型转化不成功。

运算符

算术运算符

算术运算符其实就很简单,这里+ - * / 我们就不过多介绍了。在Java中%的作用对象可以是浮点数。例如:

double a = 6.5%3;

结果是0.5

增量运算符

+= -= *= /= %=
增量运算符其实就相当于简写,例如:a+=2;就相当于a = a+2;其他的增量运算符也是如此,但是增量运算符我们需要注意的是:当我们使用增量运算符的时候不会发生隐式转化,例如:

Byte a = 10;
Byte b = 20;
a+=b;

这段代码是不会报错的。

自增/自减运算符

++   -- 
int a = 1;
int b = a++;
int c = 1;
int d = c+1;

在执行完这段代码后,b和d的值、a和c的值都是不同的,在这里a++是后置++,所以是先把a的值赋值给b,然后再++,a本身的值也++了,但是d是c+1之后的值,而且c的值还是1。这就是自增或自减的副作用,我们在使用的时候需要注意。

后置++、–跟前置++、–是不同的,前置++、–是先进行+1或者-1,然后再赋值,然而后置++、–则是先赋值然后再+1或者-1.

关系运算符(比较简单,不过多解释)

== > < >= <= !=,==不要写成=了。

逻辑运算符

&& || !

&&

逻辑并且,当&&的两边都为真的时候,结果才为真,否则为假。

int x = 1;
if(x == 2 && 1/0 == 0) {
    System.out.println("ok");
}else {
    System.out.println(no);
}

在这里插入图片描述

我们运行这段代码是不会出现错误的,因为当&&的左边表达式为假时就不会执行右边的表达式了

||

当||两侧的表达式有一个为真时,结果就为真。同样如此,当||的左边表达式为真时,就不会执行右边的表达式了。

逻辑非,就是如果表达式为真时,逻辑非一下结果就是假,表达式为假时,逻辑非的结果就是真。

位运算符

& 按位与
| 按位或
^ 按位异或
~ 按位取反
位操作符操作的都是数的二进制的补码形式。

&按位与操作符

相对应二进制都为1才为1,否则为0。例如:15&20,15转化为二进制是1111,20转化为二进制位10100
然后进行按位与操作,
0 1 1 1 1
1 0 1 0 0
0 0 1 0 0
结果为4。

| 按位或操作符

两个相对应的二进制位中有一个1就为1。
15 | 20
0 1 1 1 1
1 0 1 0 0
1 1 1 1 1
结果是31

^ 按位异或操作符

两个相对应的二进制不相同为1,相同为0
15 ^ 20
0 1 1 1 1
1 0 1 0 0
1 1 0 1 1
结果为27

~ 按位取反

如果该二进制位0则转为1,为1则转为0
15
1 1 1 1
0 0 0 0
结果为0。

移位操作符

"<<"二进制位左移
“>>” 二进制位右移
“>>>” 无符号右移
移位操作符的操作对象同样是数的二进制的补码形式

<< 左移操作符

二进制向左移动一位,右侧补0
15<<1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
结果是30,也可以说左移操作符就是乘上2^i,i是移几位。

>>右移操作符

二进制位向右移动一位,左侧补符号位,负数补1,整数补0
15>>1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
结果为7。
-15
原码:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
反码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
补码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
-15>>1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
然后再将这个二进制转化为原码,结果是-7
">>"右移操作符就相当于除以2^i。

>>>无符号右移

无符号右移左侧永远都补0,这里我就不过多介绍了。

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

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

相关文章

CSDN 周赛 47 期

CSDN 周赛 47 期 判断题单选题12 填空题编程题1、题目名称&#xff1a;最小差值&#xff08;30分&#xff09;2、题目名称&#xff1a;风险投资&#xff08;45分&#xff09; 小结 判断题 中国古代就发现并证明了勾股定理&#xff0c;并在《周髀算经》中出现了“勾三股四弦五”…

Linux 这4个进程相关的命令,太好用!

当您在Linux系统中管理进程时&#xff0c;了解一些进程监控命令是非常重要的。这些命令可以帮助您了解当前正在运行的进程以及它们的状态&#xff0c;从而更好地管理系统资源。下面是一些常用的Linux进程监控命令及其示例&#xff1a; 1、ps命令 ps命令可以列出当前正在运行的…

验证码登录开发----手机验证码登录

手机验证码登录 需求分析 为了方便用户登录&#xff0c;移动端通常都会提供通过手机验证码登录的功能 手机验证码登录的优点&#xff1a; 方便快捷、无需注册&#xff0c;直接登录使用短信验证码作为登录凭证&#xff0c;无需记忆密码安全 登录流程&#xff1a; 输入手机…

06-文章搜索页面

文章搜索页面 6-1&#xff1a;开篇 再上一章中&#xff0c;我们完成了 热搜首页 的开发&#xff0c;虽然经历了 ”千辛万苦“ &#xff0c;但是对大家来说&#xff0c;应该也是收获满满。 那么在这一章节&#xff0c;我们将会进入新的篇章&#xff0c;来到 文章搜索 页面的开…

【C++】深度剖析string类的底层结构及其模拟实现

文章目录 前言1. string的结构2. 构造、析构2.1 无参构造2.2 带参构造2.3 问题发现及修改c_stroperator []析构 2.4 合二为一 ——全缺省 3. 拷贝构造3.1 浅拷贝的默认拷贝构造3.2 深拷贝拷贝构造的实现 4. 赋值重载4.1 浅拷贝的默认赋值重载4.2 深拷贝赋值重载的实现 5. strin…

ES6 中的类(class)

前言 ES6 引入的 class 关键字具有定义类的能力。类是 ECMAScript 中新的基础性语法糖。虽然 ES6 表面上看起来可以支持正式的面向对象编程&#xff0c;但实际上它背后使用的依旧是原型和构造函数的概念。&#xff08;笔记内容参考《JavaScript 高级程序设计&#xff08;第 4 …

TTL反相器、OC门、TS门、推挽输出、开漏输出

TTL反相器 这是一个TTL反相器&#xff0c;这是经过了很多工程师多种设计最终沉淀出来的电路&#xff0c;这个电路是比较成熟的。我们只需要对这个电路进行解析即可&#xff0c;不需要再去研究当初是如何设计出来的。 学过CMOS应该知道&#xff0c;右侧的输出级其实也是个推挽输…

为什么程序实际可用内存会远超物理内存?

背景介绍 不知道在你刚接触计算机的时候&#xff0c;有没有这么一个疑问&#xff1a;“为什么我的机器上只有两个G 的物理内存&#xff0c;但我却可以使用比这大得多的内存&#xff0c;比如 256T&#xff1f;”反正我当时还是挺疑惑的&#xff0c;不过现在我可以来告诉你这个答…

如何将销售效果最大化:从人工智能聊天机器人到即时聊天

聊天机器人的崛起 从几年前开始&#xff0c;客户支持是聊天机器人使用的第一个爆发点。B2C引领潮流&#xff0c;B2B紧随其后。市场营销和销售最近也开始加入&#xff0c;让聊天机器人承担起迎接和引导网站游客的任务。现在&#xff0c;人工智能已经进入聊天&#xff0c;可以说…

机器学习 第一周

目录 1. 什么是机器学习(课本给出的部分定义) 我理解的机器学习:

Java基础:IO流有哪些,各有什么特点和功能

具体操作分成面向字节(Byte)和面向字符(Character)两种方式。 如下图所示&#xff1a; IO流的三种分类方式 IO流的层次结构 IO流的常用基类有&#xff1a; 字节流的抽象基类&#xff1a;InputStream和OutputStream&#xff1b; 字符流的抽象基类&#xff1a;Reader和Writer…

20、单元测试

文章目录 1、JUnit5 的变化2、JUnit5常用注解3、断言&#xff08;assertions&#xff09;1、简单断言2、数组断言3、组合断言4、异常断言5、超时断言6、快速失败 4、前置条件&#xff08;assumptions&#xff09;5、嵌套测试6、参数化测试7、迁移指南 【尚硅谷】SpringBoot2零基…

JAVA性能优化实例

目录 概述 Sql性能优化 多线程 利用内存缓存 功能优化 参考博客 概述 性能优化的几个点&#xff0c;大致可以分为&#xff1a; sql优化使用多线程利用内存&#xff0c;缓存等&#xff0c;将固定不常更改的数据放入在&#xff0c;存取更快的内存当中功能实现逻辑优化 Sql性…

五分钟,说说Python 中多线程共享全局变量的问题

嗨害大家好鸭&#xff01;我是爱摸鱼的芝士❤ 写在前面不得不看的一些P话&#xff1a; Python 中多个线程之间是可以共享全局变量的数据的。 但是&#xff0c;多线程共享全局变量是会出问题的。 假设两个线程 t1 和 t2 都要对全局变量g_num (默认是0)进行加1运算&#xff0c…

日常项目技术方案脉络

开篇引砖 软件在其生命周期中&#xff0c;当其进入稳定期后&#xff0c;大部分时间都处于迭代更新维护阶段。在这漫长的三年甚至五年的存活期内&#xff0c;我们需要面对林林种种大大小小的需求。今天我们就聊聊在这段期间&#xff0c;如何快速产出一份合格的技术方案。 方案给…

JavaScript经典教程(一)-- HTML基础部分

179&#xff1a;HTML基础部分&#xff08;元素分类、特性、特殊元素等&#xff09; 1、复习&#xff1a; HTML&#xff1a; 超文本标记语言 CSS&#xff1a; 层叠样式表 JavaScript&#xff1a; 脚本语言 http&#xff1a;超文本传输协议 https&#xff1a; 经过ssl加密的超…

如何搭建关键字驱动自动化测试框架?这绝对是全网天花板的教程

目录 1. 关键字驱动自动化测试介绍 2. 搭建关键字驱动自动化测试框架 步骤1&#xff1a;选择测试工具 步骤2&#xff1a;定义测试用例 步骤3&#xff1a;编写测试驱动引擎 步骤4&#xff1a;实现测试关键字库 步骤5&#xff1a;执行测试 3. 实现关键字驱动自动化测试的关…

c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数

c/c&#xff1a;gets()&#xff0c;fgets()&#xff0c;puts()&#xff0c;fputs()&#xff0c;strlen()&#xff0c;字符串拼接函数 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所知道的周…

C语言程序环境与预处理回顾总结

大概讲解与铺垫 首先&#xff0c;什么叫c语言的源代码&#xff1f;也就是我自己写的.c文件里面的代码&#xff0c;这个就叫做源代码。然后需要知道的是计算机他只认识二进制&#xff0c;因此他只能接收与执行二进制指令。也就是可执行的机器指令。然后我们必须得知道&#xff…

JavaWeb——tomcat(安装使用)

目录 WEB服务器-Tomcat 服务器概述 Web服务器 Tomcat Tomcat下载 安装与卸载 启动与关闭 WEB服务器-Tomcat 服务器概述 服务器硬件&#xff1a; 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务…