CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

JAVA的数据类型和运算符-源码交易平台丞旭猿

本文介绍一些编程中的基本概念,比如:标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。这些是编程中的砖块,是编程的基础。 要想开始正式编程,还需要再学控制语句,控制语句就像水泥,可以把砖块粘到一起,最终形成一座大厦。控制语句将在下一章学习。

一、进制及其转换

1.1进制类型

十进制:人类使用

二进制:计算机使用

八进制和十六进制:为了更好的表示二进制(缩短二进制长度)

各进制数之间的关系

1.2计算机为什么使用二进制

  • 物理上容易实现,可靠性强;
  • 运算简单
  • 便于进行逻辑运算。

二进制,是计算技术中广泛采用的一种数制,由德国数理哲学大师莱布尼茨于1679年发明。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是逢二进一。数字计算机只能识别处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。

二进制对应两种状态,广泛应用于电子科学。比如:可以对应电子器件的开关状态、对应信号电压状态(+5V等价于逻辑”1″,0V等价于逻辑”0″)、对应卡带是否打孔状态、电磁存储(磁体状态:南为0,北为1)等等。

二进制广泛应用于我们生活的方方面面。比如,广泛使用的摩尔斯电码,它由两种基本信号组成:短促的点信号·,读滴;保持一定时间的长信号—,读嗒。然后,组成了26个字母,从而拼写出相应的单词。

当然,我们没有必要记住这些。如果一定想学,记住SOS就好了^_^

其实有人说在中国三千年前的著作《周易》中存在二进制数的使用和二——十进制数的转换编码。而且,更简单、更先进、更科学。你认为是这么一回事吗?

在线进制转化的工具:https://tool.lu/hexconvert/

1.3进制转换

二进制转十进制

二进制转十进制采用权相加法。

十进制转二进制

十进制整数转换为二进制整数采用”除2取余,逆序排列”法。

1.4计算机数据存储单位

位 bit

最小值 0

最大值 1

表示的数的范围 0-1(21-1)

字节 byte:8bit

最小值 00000000

最大值 11111111

表示的数的范围 0-255(28-1)

字符:16bit

最小值 0000 0000 0000 0000

最大值 1111 1111 1111 1111

表示的数的范围0-65535(216-1)

KB、MB、GB、TB

1KB = 1024Byte ≈103Byte

1MB = 1024KB ≈ 106Byte

1GB = 1024MB ≈ 109Byte

1TB = 1024GB ≈ 1012Byte

1.5计数范围

符号位

二进制数如何表示正数和负数呢?

使用最高位作为符号位,0代表整数,1代表负数;其余数位用作数值位,代表数值。

字节 byte表示的数的范围

无符号数:0-255(28-1) 256个数

有符号数:-128(-27)–127(27-1) 还是256个数

字符表示的数的范围

无符号数 0-65535(216-1) 65536个数

有符号数 -32768(-215)—–32767(215-1) 还是65536个数

1.6字符集和字符编码

计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如a用什么表示,称为”编码”;反之,将存储在计算机中的二进制数解析显示出来,称为”解码”,如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致a解析成b或者乱码。

字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

常见的字符集和字符编码

ASCII (阿寺克)

· ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,到目前为止共定义了128个字符。每个字符用1个字节表示。

  • 0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、DEL(删除)、BS(退格)等
  • 32 空格
  • 48~57为0到9十个阿拉伯数字。
  • 65~90为26个大写英文字母
  • 97~122号为26个小写英文字母

ISO8859-1

  • Latin-1,是西欧常用字符,包括德法两国的字母
  • 1个字节,兼容ASCII码

GB2312

  • 大陆使用最早、最广的简体中文字符集;兼容ASCII编码
  • 每个汉字用2个字节表示

GBK

  • GB2312的扩展,可以表示繁体中文
  • 一个汉字用 2个字节表示

GB18030

  • GBK的扩展,最新的规范,不仅可以表示汉字、还可以表示维吾尔文、藏文等多个少数民族的字符
  • 一个字符用 2个字节表示

BIG5

  • 台湾的大五码,表示繁体汉字 2个字节

Unicode —-UTF-8 UTF-16

  • 统一码、万国码、单一码 通常认为一个字符占用2个字节
  • 为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求国际通用字符集。
  • 目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。第0平面(BMP)最为重要。
  • Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节

ANSI:

  • 并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。
  • 在简体中文Windows操作系统中,ANSI 代表 GBK 编码;在繁体中文Windows操作系统中,ANSI代表Big5;在日文Windows操作系统中,ANSI 代表 Shift_JIS 编码。
老鸟建议学习本章,一定不要纠结于概念,不要停留,大致了解就快速开始下一章。永远记住快速入门、快速实战;实战中提高,发展中解决问题。

二、八大基本数据类型入门

2.1标识符

标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name、gender等。标识符需要遵守一定的规则:

  • 标识符必须以字母、下划线_、美元符号$开头。
  • 标识符其它部分可以是字母、下划线_、美元符$和数字的任意组合。
  • Java 标识符大小写敏感,且长度无限制。
  • 标识符不可以是Java的关键字。
标识符的使用规范>表示类名的标识符:每个单词的首字母大写,如Man, GoodManq>表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为驼峰原则,如eat(), eatFood()

Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是不建议大家使用汉字来定义标识符!

合法的标识符

不合法的标识符

int 1a = 3; //不能用数字开头int a = 3; //不能包含这样的特殊字符int int = 3; //不能使用关键字

2.2关键字

Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的,我们不能使用关键字作为变量名或方法名。

菜鸟雷区出于应试教育的惯性思维,很多新手很可能去背上面的单词,从实战思维出发,我们不需要刻意去记!随着学习的深入,自然就非常熟悉了。

2.3常量和变量

常量变量定义

在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。

变量举例:

在2D游戏程序中,需要代表人物的位置,则需要2个变量,一个是x坐标,一个是y坐标,在程序运行过程中,这两个变量的值会发生改变

常量举例

代表常数,便于程序的修改(例如:圆周率的值)

增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)

在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表。

变量本质上就是代表一个可操作的存储空间,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问对应的存储空间,从而操纵这个存储空间存储的值。

Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。

变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和变量值。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

变量的声明

格式为:

在内存中到底发生了什么呢?

我们已经对变量及其组成有了直观的认识,下面在给出一个形象的比喻加深理解。

常量通常指一个固定的值,如:1、2、’a’、’b’、true、false、helloWorld等。在Java语言中,也可以利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

声明格式为:

final type varName = value;

为了更好的区分和表述,一般将1、2、3、’a’、’b’、true、false、helloWorld等称为字面常量,而使用final修饰的PI等称为符号常量

2.4使用Scanner进行键盘输入

为了我们能写出更加复杂的程序,可以让我们的程序和用户可以通过键盘交互,我们先学习一下简单的键盘输入和输出。

注意:

1)http://System.in代表键盘输入,System.out代表控制台输出

2) Scanner input =newScanner(System.in);是创建一个对象,后面进行详细讲解,此处会使用即可

3) 需要通过importjava.util.Scanner;实现导入,指明Scanner类的完整路径

4)doubler = input.nextDouble(); 从键盘输入一个double类型数赋给半径变量r。

2.5 数据类型

Java是一种强类型语言,每个变量都必须声明其数据类型。Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。

数据类型的分类

Java中定义了3类8种基本数据类型

  • 数值型- byte、 short、int、 long、float、 double
  • 字符型- char
  • 布尔型-boolean
注意事项引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!q 本章只讲解基本数据类型。引用数据类型在后续数组和面向对象章节讲解。

三、八大基本数据类型

3.1 整数数据类型

整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。

Java 语言整型常量的四种表示形式> 十进制整数,如:99, -500, 0> 八进制整数,要求以 0 开头,如:015> 十六进制数,要求 0x 或 0X 开头,如:0x15> 二进制数,要求0b或0B开头,如:0b01110011

Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ 。

long类型常数的写法及变量的声明

报错:The literal 55555555555 of type int is out of range,所以我们需要修改代码为:

3.2浮点数据类型

带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。

float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型

Java浮点类型常量有两种表示形式> 十进制数形式,例如:3.14 314.0 0.314> 科学记数法形式,如3.14e0 3.14E2 3.14E-1

使用科学记数法给浮点型变量赋值

float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。

float类型常量的写法及变量的声明

老鸟建议浮点类型float,double的数据不适合在不容许舍入误差的金融计算领域。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

浮点型数据的比较一

浮点型数据的比较二

运行以上两个示例,发现示例2-13的结果是false,而示例2-14的输出结果是d1==d2。这是因为由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。

菜鸟雷区不要使用浮点数进行比较!很多新人甚至很多理论不扎实的有工作经验的程序员也会犯这个错误!需要比较请使用BigDecimal类

3.3字符数据类型

字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与A是不同的,A表示含有一个字符的字符串。

char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。

字符型演示

Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义。常用的转义字符及其含义和Unicode值如表所示。

转义字符

Unicode具有从0到65535之间的编码,他们通常用从’\u0000’到’\uFFFF’之间的十六进制值来表示(前缀为u表示Unicode)

字符型的十六进制值表示方法

Char类型在内存中存储的其实就是该字符的Unicode编码,这是一个数字。其实是也可以这么赋值的。

注意事项a是字符串String,不是字符char。String可以是0到多个字符组成的字符串。

3.4布尔数据类型

boolean类型有两个常量值,true和false,不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。boolean 类型用来判断逻辑条件,一般用于程序流程控制。

老鸟建议Less is More!!请不要这样写:if ( flag = = true ),只有新手才那么写。关键也很容易写错成if(flag=true),这样就变成赋值flag 为true而不是判断!老鸟的写法是if ( flag )或者if ( !flag)

关于boolean类型几个字节的说明:

在《Java虚拟机规范》一书中的描述:虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。

四、运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量。

相关概念辨析

  • + 运算符 操作符 Operator
  • 5+6 表达式 expression
  • 5 6 操作数 Operand
  • int m =5+6; 语句 Sentence

4.1.算术运算符

算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。其中的%是取模运算符,就是我们常说的求余数操作。

二元运算符的运算规则:

整数运算:

  • 如果两个操作数有一个为long, 则结果也为long。
  • 没有long时,结果为int。即使操作数全为short,byte,结果也是int。

浮点运算:

  • 如果两个操作数有一个为double,则结果为double。
  • 只有两个操作数都是float,则结果才为float。

取模运算:

  • 其操作数可以为浮点数,一般使用整数,结果是余数,余数符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。

算术运算符中++(自增),–(自减)属于一元运算符,该类运算符只需要一个操作数。

i++;和++i;

如果是一条单独的语句,没有差别,都是自增1;

如果不是一条单独的语句(语句的一部分)有差别

int n = 6 + m++; 先运算符再+1

int n = 6 + ++m; 先+1再运算

先算乘除,再算加减。算术运算符的优先级别是不同的:

++ — 大于 * / % 大于 + –

可以使用小括号改变运算顺序

4.2.赋值运算符

赋值运算符可以说是Java中使用频率最高的运算符了,也是运算级别最低的运算符。它的运算顺序是自右向左。

除了基本赋值运算符外,还可以和算术运算符结合,组成扩展赋值运算符。

4.3.关系运算符

关系运算符用来进行比较运算,如表所示。关系运算的结果是布尔值:true/false;经常用在选择结构if、循环结构for while的条件表达式中,进行条件判断。

注意事项=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。==、!= 是所有(基本和引用)数据类型都可以使用。> 、>=、 <、 <= 仅针对数值类型(byte/short/int/long,float/double 以及char)。> 、>=、 <、 <= 的优先级别大于==、!=

4.4.逻辑运算符

Java中的逻辑运算符如表所示。逻辑运算的操作数和运算结果都是boolean值。

生活案例:

  • 用户登录成功:username正确 并且 password正确
  • 用户登录失败

username错误 或者 密码错误

除了登录成功之外的 除了(username正确 并且 password正确)

  • 班级流动红旗颁奖

名次前三名 and 分数大于95分

名次前三名 or 分数大于95分

短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。

理解短路运算符生活案例

  • 用户登录:用户名错误了,就没有必要判断密码了,肯定是登录失败
  • 大明和二明都同意,妈妈才带他们去旅行。大明不去,二明不问也罢

优先级别:非>与>或,可以使用小括号改变运算顺序和提高可读性

4.5.位运算符

位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整数。

如果操作的对象是char、byte、short,位移动作发生前其值会自动晋升为int,运算结果也为int。

4.6.条件运算符

语法格式:

x ? y : z

其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。

可以用来替代简单的if-else选择语句。

4.7.运算符的优先级别

老鸟建议> 大家不需要去刻意的记这些优先级,表达式里面优先使用小括号来组织!!> 优先级别最低的赋值运算符和条件运算符> 总体而言,算术>关系>逻辑>条件>赋值> 运算级别最高的是( ),单目运算符运算级别都很高,比如++、–、~、!

五、基本数据类型的类型转换

我们讲解了八种基本数据类型,除了boolean类型之外的七种类型是可以自动转化的。甚至,我们也可以使用强制类型转换将数据类型变成我们所需要的。本节详细讲解关于类型转换的细节。

什么是类型转换

在(赋值或算术)运算时,要求数据类型相同,否则要进行类型转换

类型转换的类型

  • 基本数据类型的类型转换:

基本数据类型可以分为数值类型(int short byte long float double char)和非数值类型(boolean)

类型转换只涉及数值类型,不涉及booleane类型

  • 引用数据类型的类型转换:

父类和子类 Person Student Animal Dog 以后再讲

5.1自动类型转换

自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

5.2强制类型转换

强制类型转换,又被称为造型(cast),用于强制的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

语法格式:

(type)var

运算符()中的type表示将值var想要转换成的目标数据类型。

强制类型转换

运行结果如图所示。

当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值。

强制类型转换特例

新手雷区不能在布尔类型和任何数值类型之间做强制类型转换

5.3基本类型转化时常见错误和问题

  • 操作比较大的数时,要留意是否溢出,尤其是整数操作时

类型转换常见问题一

运行结果如图所示。

运行效果图
  • 可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。

自动类型转换特例

视频指路:

配套资料:

链接:https://pan.baidu.com/s/1r9DWjZMarZcRGZq_pS5V6g

提取码:ewzm

私信可免费获取200G视频+源码+课件哦~

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容