JAVA——数据类型与运算符

数据类型

注意事项:1.初始化操作是可选的, 但是建议创建变量的时候都显式初始化.

                  2.最后不要忘记分号, 否则会编译失败.

                  3.初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.

                  4.float 类型在 Java 中占四个字节, 遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float.

                  5.Java 中使用 单引号 + 单个字母 的形式表示字符字面值.

                  6.计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.

                  7.字节类型和字符类型互不相干.

                  8.short表示范围比较小, 一般不推荐使用.

                  9.boolean 类型的变量只有两种取值, true 表示真, false 表示假.
                  10.Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.

                  11.Java 使用 双引号 + 若干字符 的方式表示字符串字面值.

                  12.String 不是基本类型, 而是引用类型.

什么是字节

1.字节是计算机中表示空间大小的基本单位.
2.计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).
3.我们平时的计算机为 8GB 内存, 意思是 8G 个字节.其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.所以 8GB 相当于 80 多亿个字节.
 

各种数据类型所占的字节大小

1.整型:byte        1个字节              8个bit位;

              short       2个字节             16个bit位;

              int           4个字节              32个bit位;

              long         8个字节             64个bit位。


2.浮点型:float       4个字节            32个bit位;

                 double    8个字节           64个bit位。

3.字符型:char       2个字节            16个bit位。

4.布尔型:boolean     并未指明多少字节。

常用的转义字符

转义字符
\n换行
\t水平制表符
\'单引号
\"双引号
\?问号
\ddd(三位八进制)1到3位八进制数所代表的任意字符
\xhh(十六进制)十六进制所代表的任意字符

字符串的  +   操作

+在字符串中表示拼接

示例1:

String str = "Love = ";
int a = 1314;
int b = 520;
String result = str + a + b;
System.out.println(result);

运行结果:Love=1314520

示例2:

int a = 11;
int b = 18;
System.out.println("a = " + a + ",b = " + b)

运行结果:a=11,b=18

结论:当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为.

变量的命名规则

1. 一个变量名只能包含数字, 字母, 下划线
2. 数字不能开头.
3. num 和 Num 是两个不同的变量.
4.语法上允许使用中文/美元符($)命名变量, 但是强烈不推荐这样做.
5. 变量名推荐使用英语名词.
6.变量命名推荐小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单     词首字母都大写

小驼峰命名法示例

int maxValue=100;

String birthdayWish="暴富";

常量

常量指的是运行时类型不能发生改变

1.字面值常量

10int 字面值常量(十进制)
010int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10Llong 字面值常量. 也可以写作 10l (小写的L)
1.0double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.0e5double 字面值常量. 科学计数法表示. 相当于 1.0 * 10^5
1.2ffloat 字面值常量, 也可以写作 1.2F
trueboolen 字面值常量, 同样的还有 false
'A'char 字面值常量, 单引号中只能有一个字符
"abc"String 字面值常量, 双引号中可以有多个字符.

2.final修饰的常量

final int value=10;

value=20;
编译出错. 提示 无法为最终变量value分配值

类型转换

1.隐式类型转换

int a=10;
long b=123;
long c=a+b;\\编译通过
int d=a+b;\\编译报错,提示可能会损失精度

结论:表示范围小的类型能隐式转换为表示范围大的类型,反之则不能。

2.强制类型转换

int a=123;
double b=13.14;
int c=a+b;\\编译错误,提示可能会损失精度
int d=a+(int)b;\\编译通过

注意:使用强制类型转换会使范围大的精度丢失,如b=13.14会变成13,d的值为136.

特例

int a=12;
boolean b=true;
int c=(boolean)a;\\编译错误,提示不兼容的类型

结论:强制类型转换不是一定能成功, 互不相干的类型之间无法强转。

数值提升

int a=100;
long b=1232;
int c=a+b;\\编译错误,提示可能会丢失精度
long d=a+b;\\编译通过

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用               long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

特例:

byte a=10;
byte b=20;
byte c=a+b;\\编译错误,提示不兼容的类型: 从int转换到byte可能会有损失

为什么都是相同类型还会报错呢?

原因是:由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便,                诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int,在进行计算。

解决方法

byte a=10;
byte b=20;
byte c=(byte)(a+b);

只需要对结果进行强制类型转换就行。

int 和String之间的相互转换

1.int转String

int num = 10;
String str1 = num + "";\\方法一
String str2 = String.valueOf(num);\\方法二

2.String转int

String str = "100";
int num = Integer.parseInt(str);

运算符

1.算术运算符

基本四则运算符有:+   -    *   /    %

注意:1.int/int 结果还是int

int a=1;
int b=2;
System.out.println(a/b);//结果为0

           2.分子或分母只要有一方为double,结果就为double

int a=1;
double b=2.0;
System.out.println(a/b);//结果为0.5

            3.分母不能为0

int a=1;
int b=0;
System.out.println(a/b);
//运行结果:Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)

            4.%不仅能对int取余还能对double取余

int a=20;
int b=3;
double c=3.0;
double d=2.0;
System.out.println(a%b);//结果为2
System.out.println(a%c);//结果为2.0
System.out.println(c%d);//结果为1.0

增量赋值运算符 +=    -=     *=     /=     %=

int a=10;
a+=1;//等价于a=a+1
a-=1;//等价于a=a-1
a*=1;//等价于a=a*1
a/=1;//等价于a=a/1
a%=1;//等价于a=a%1

自增/自减运算符 ++      --
 

int a1=10;
int a2=10;
int a3=10;
int a4=10;
int b=a1++;//后置++,a1先将结果赋给b,然后再加1   a1=11,b=10
int c=++a2;//前置++,a2先加1,再将结果赋给c       a2=11,c=11
int d=a3--;//后置--,a3先将结果赋给d,然后再减1   a3=9,d=10
int e=--a4;//前置--,a4先减1,再将结果赋给e       a4=9,e=9

注意:在有些编译器下不取自增运算的表达式的返回值, 前置自增和后置自增没有区别(作者这里            使用的是IDEA)

2.关系运算符

      6种关系运算符==     !=       <      >       <=        >= 

int a=10;
int b=20;
boolean ret1=(a==b);//ret1为false
boolean ret2=(a!=b);//ret2为true
boolean ret3=(a>b);//ret3为false
boolean ret4=(a<b);//ret4为true
boolean ret5=(a>=b);//ret5为false
boolean ret6=(a<=b);//ret6为false

注意:关系运算符的表达式返回值都是boolean类型(true和false)

3.逻辑运算符

逻辑与(&&)

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);//结果为true
System.out.println(b < a && b < c);//结果为false
System.out.println(a < b && c < b);//结果为false
System.out.println(b < a && c < d);//结果为false

结论:逻辑与(&&),只要有一个表达式为假,那么结果一定为假,即一假则假。

逻辑或(||)

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);//结果为true
System.out.println(b < a || b < c);//结果为true
System.out.println(a < b || c < b);//结果为true
System.out.println(b < a || c < d);//结果为false

结论:逻辑或(||),只要有一个表达式为真,那么结果一定为真,即一真则真。

逻辑非(  !)

int a = 10;
int b = 20;
System.out.println(!a < b);//因为a<b结果为true,!true则为false
System.out.println(!a > b);//因为a>b结果为false,!false则为true

结论:逻辑非( !),表达式为真则结果为假,表达式为假则结果为真

注意:1.逻辑运算符的返回值都是boolean类型

           2.逻辑与(&&)和逻辑或(||)都是双目操作符,只有逻辑非( !)是单目操作符

短路求值

假&&真&&假&&假&&真&&真            //结果为假

真||假||真||假||假||真||假||假               //结果为真

结论:1.当一连串表达式中只有逻辑与(&&)时,只要发现一个表达式为假,后面结果都不用                    算,结果肯定为假。

           2.当一连串表达式中只有逻辑或(||)时,只要发现一个表达式为真,后面结果都不用                      算,结果肯定为真。

4.位运算符

位运算符有   &,|,~,^ 4种

按位与(&)

int a=8;
int b=24;
System.out.println(a&b);//结果为8

结果是怎么计算的呢?

答案是:先将8和24的二进制位对其,然后相同位置都为1才为1,其余位置为0

按位或(|)

int a=8;
int b=24;
System.out.println(a|b);//结果为24

结果是怎么计算的呢?

答案是:先将8和24的二进制位对其,然后相同位置都为0才为0,其余位置为1

按位取反(~)

int a=8;
System.out.println(~a);

按位取反是将数字的二进制位的0变为1,1变为0

按位异或(^)

int a=8;
int b=24;
System.out.println(a^b);//结果为16

结果是怎么计算的呢?

答案是:先将8和24的二进制位对其,然后相同位置的数相同为0,相异为1

5.移位运算符

移位运算符有<<      >>       >>>   三种

左移 <<: 最左侧位不要了, 最右侧补 0

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

注意:1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
           2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
           3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
           4. 移动负数位或者移位位数过大都没有意义
           5.使用时都是二进制位

6.条件运算符

条件操作符只有一个,为

基本格式为:表达式1?表达式2:表达式3

当表达式1为真时,执行表达式2;当表达式1为假时,执行表达式3.

int a=3;
int b=5;
int min=(b>a)?a:b;//找最小值

7.运算符的优先级

优先级从上往下依次递减

运算符之间的优先级. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可
 


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s的坑,从这里开始

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 以前刚接触k8s时踩了不少坑&#xff0c;比如这些&#xff1a; 问题1 1、在master节点使用kubectl命令时&#xff0c;报错&…

新手如何学习单片机入行?

新手如何学习单片机入行&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…

使用 Docker 部署 的WAF: 雷池社区版

Web应用防火墙&#xff08;WAF&#xff09;是保护网站不受恶意攻击的关键组件。 使用 Docker 部署雷池社区版&#xff0c;可以大大简化安全管理工作。 一、WAF 雷池社区版简介 雷池社区版是一种流行的开源 Web 应用防火墙&#xff0c;它提供基本的安全保护&#xff0c;如防止…

10个常考的前端手写题,你全都会吗?

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 今天来分享一下10个常见的JavaScript手写功能。 目录 1.实现new 2.call、apply、…

CentOS 6.10 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境&#xff0c;客观条件不得不用的话&#xff0c;优选7.9版本&#xff0c;8.5版本次之&#xff0c;最次6.10版本&#xff08;比如说Oracle 11GR2就建议在6版本上部署&#xff09;&#xff01; 引导和开始安装 选择倒计时结…

python爬虫--网页代码抓取

我回来了。 目录 前言一、爬虫是什么&#xff1f;二、使用步骤代码讲解第一版第二版第三版 总结 前言 爬虫&#xff0c;第一章 一、爬虫是什么&#xff1f; 爬虫是指一种自动化程序&#xff0c;通常被用于互联网上的数据采集。这些程序会模拟人类用户的行为&#xff0c;通过…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (12) | 视觉模型可视化与可解释性(Visualizing and Understanding)

前言 &#x1f4da; 笔记专栏&#xff1a;斯坦福CS231N&#xff1a;面向视觉识别的卷积神经网络&#xff08;23&#xff09;&#x1f517; 课程链接&#xff1a;https://www.bilibili.com/video/BV1xV411R7i5&#x1f4bb; CS231n: 深度学习计算机视觉&#xff08;2017&#xf…

【题解 优化dp】 B - Base Station Construction

题目描述&#xff1a; 分析&#xff1a; 当dp状态设定不好的时候&#xff0c;我们不妨从最简单的部分出发 设 f i f_i fi​表示必须在第i个点建设基站&#xff0c;并且i号点之前的线段全部满足要求时所需要的最小代价 为什么这么设呢&#xff1f; 这道题想要入手&#xff0c;…

数据结构Java版(2)——栈Stack

一、概念 栈也是一种线性数据结构&#xff0c;最主要的特点是入栈顺序和出栈顺序是相反的&#xff0c;操作时只能从栈顶进行操作&#xff0c;在Java中给我们提供了一个泛型栈——Stack&#xff0c;其中最常用的方法有&#xff1a; void push(E):进栈E pop():退栈E peek():查看…

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…

并发编程知识点梳理

并发编程 在了解并发编程基本知识&#xff0c;先了解几本书&#xff0c;方便学习提高&#xff0c;分别为&#xff1a;java编程思想、企业应用架构模式、并发编程实战。 多线程中的设计模式有&#xff1a;Future、Master-Worker、生产者-消费者。 本次课程分为以下几部分进行…

js - - - - - getSelection 对光标和选区的操作

window.getSelection getSelection示例代码属性方法 getSelection 官方MDN地址 示例代码 <template><div>这里是一段默认的文字内容</div> </template> <script> export default {name: "Home",mounted() {document.addEventListen…

在PyCharm中创建Flask项目

在 PyCharm 中创建 Flask 项目的步骤如下&#xff1a; 打开 PyCharm&#xff0c;并选择 "Create New Project"&#xff08;新建项目&#xff09;。在弹出的窗口中&#xff0c;选择左侧的 "Python" 选项&#xff0c;然后选择右侧的 "Flask" 项目…

iPerf3 使用指南

文章目录 iPerf3 使用指南1 iPerf3 简介2 安装指令2.1 Windows2.2 Linux 3 入门用法4 进阶用法4.1 启动服务端4.2 TCP 带宽测试4.3 UDP 带宽测试 5 iPerf3 命令说明 iPerf3 使用指南 1 iPerf3 简介 iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具。它支持时序、缓冲区、…

快速评估您的IT事件管理实践

您在寻找提高事件响应效率和有效性的方法吗&#xff1f;为什么需要评估IT事件管理&#xff1f; 尽管改进组织的事件管理实践不会一蹴而就&#xff0c;但我们还是要从制定明确的事件响应计划开始。 使用ServiceDesk Plus&#xff0c;快速检查您的事件管理实践是否符合行业标准&a…

SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)

1. 漏洞介绍 SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数&#xff0c;该调用了自定义函数validScript&#xff0c;该函数中用户能够控制 functi…

学习vue3(二)

三、其它 Composition API 1.shallowReactive 与 shallowRef shallowReactive&#xff1a;只处理对象最外层属性的响应式&#xff08;浅响应式&#xff09;。 shallowRef&#xff1a;只处理基本数据类型的响应式, 不进行对象的响应式处理。 什么时候使用? 如果有一个对象数…

1. SpringBoot3 基础

文章目录 1. SpringBoot 概述2. SpringBoot 入门3. SpringBoot 配置文件3.1 SpringBoot 配置文件基本使用3.2 yml 配置文件 4. SpringBoot 整合 Mybatis5. Bean 管理5.1 Bean 扫描5.2 Bean 注册5.3 注册条件 6. 组合注解7. 自动配置原理8. 自定义 Starter 1. SpringBoot 概述 …

SpringMVC下半篇之异常处理器及日期转换器

3.异常处理器 如果不加以异常处理&#xff0c;错误信息肯定会抛在浏览器页面上&#xff0c;这样很不友好&#xff0c;所以必须进行异常处理。 3.1.异常处理思路 系统的dao、service、controller出现都通过throws Exception向上抛出&#xff0c;最后由springmvc前端控制器交由…

VBA窗体跟随活动单元格【简易版】(2/2)

上一篇博客&#xff08;文章连接如下&#xff09;中使用工作表事件Worksheet_SelectionChange实现了窗体跟随活动单元格的动态效果。 VBA窗体跟随活动单元格【简易版】(1/2) 为了在用户滚动工作表窗体之后仍能够实现跟随效果&#xff0c;需要使用Application.Windows(1).Visibl…