数据类型与运算符

早过忘川 提交于 2020-02-09 03:32:16

JavaSE Day03 数据类型与运算符

数据类型

引入数据类型的意义:由于在java中变量的数据随时改变,所以引入数据类型主要有两个目的。
目的一:为了限制当前变量当中所存储的数据,变量当中的数据必须是可兼容的。
目的二:为了限制当前变量在内存中的空间大小。

数据类型的分类

1. 基本数据类型

基本数据类型主要有 整数 浮点数 字符型 布尔型

整数

整数的数据类型有 byte short int long
分成四类整型的原因是主要看取值范围 比如年龄 0~100 byte的数据类型就比较合适,因为1byte=8bit 282^8=256 共256种。

  • byte

    byte类型的数据占内存为1字节
    范围:-128 ~ 127(27-2^7 ~ 2712^7-1282^8 共256种数据可用。

  • short
    short类型的数据占内存为2字节
    范围: -32768~32767 (215-2^{15} ~ 21512^{15}-1

  • int
    int类型的数据占内存为4字节。
    范围:(231-2^{31} ~ 23112^{31}-1

    整数常量默认是int类型。

  • long

    long类型的数据占内存为8字节。
    范围:(263-2^{63}~26312^{63}-1)

  • byte a = 100;语句不会报错,但是byte b = 300;会报错。

    这是由于整数常量默认为int类型,在把常量给byte变量赋值时涉及到了自动类型转换的原因。这个自动类型转换是向下的从大字节到小字节 int->byte
    100的有效数据可以直接放入byte里面,所以编译器会将常量100之前的所有空字节省去。
    但是也可以强行将300放到byte中-强制类型转换。
    byte b = (byte)300;
    强制类型一定是从大字节到小字节。

  • byte a = b + c;语句也会有报错,主要原因是表达式不确定变量的值。

    对a而言 等号后面的表达式是两个变量 a不能确定 b c的值。
    整数常量可以后面加l或L转换为long常量。

浮点数

浮点数的数据类型有 float 和 double
float 4字节
double 8字节
浮点型常量默认是double类型。

字符型

字符型的数据类型为char

char类型的数据占内存为2字节,由于字符型存储的是字符的编号,所以是都是正数,数值范围为0~65535。

  • 字符主要是以图形图像的方式存储或表示信息的图片。

    图片主要由像素组成,图片最终还是以二进制的文件格式存在计算机中。要显示字符'A'就要从计算机中找到它的字符文件。

  • 编码表

    为了快速查找制作了字符集-编码表。是由编号和字符的路径组成的表。码表类似于字典。
    常见的编码表有:ASCII表、GBK表-中文表、UTF-8表-全球表
    ASCII码表中常用的字符和对应编号:‘a’ 97 ‘A’ 65 ‘0’ 48
    乱码出现的原因:同样的编号在不同的表里可能是不同的字符。
    输出字符的过程:将一个字符编号给字符变量,在打印这个字符变量的时候先去码表中找到编号相对应的字符然后再去打印。
    字符变量在参与运算时是以编号身份参加。
    \u指定编码器unicode 显示’?’的原因是编码在码表中可能为空,但是不管哪个码表前面的内容基本一样。

布尔型

数据类型名为boolean。它的值只有true、false。
布尔型在java中没有一个明确的大小主要和底层虚拟机相关,如果boolean是一个变量的话,大小为1字节。如果boolean是一个数组的话每个空间是4字节。

2.引用数据类型

  • 字符串 String

    String不存在具体的大小,它的大小是根据字符串的内容而决定,String是java中自带的一个类

null 数组 对象

3. 如何定义一个变量

两种定义的方法:一种是在定义时赋值,另一种是先定义再赋值。

数据类型 变量名=常量;
数据类型 变量名;

运算符

运算符就是程序的基本指令

算数运算符

+加法运算
-减法运算
*乘法运算
/除法运算
%取余运算
++自增运算
--自减运算

  • 加法运算:如果+两边都是数字的话,表示数学上的加法运算。
    如果+两边有一个是字符串,+作为连接符使用。

  • 除法运算:如果两边都是整数,结果就是整数也就是整除的情况整除。但是只要两边存在一个小数,结果就是一定是小数。

  • 取余运算:相当于是整除运算但是得到的结果是余数。

  • 自增运算:分为前++和后++

++i i本身直接+1再参与运算
i++ i先参与运算再+1

要特别注意i++的流程:

  1. 先开辟一个临时存储区
  2. 将i的值复制到临时存储区
  3. i自身+1
  4. 临时存储区的值等待被调用(参与运算 赋值 输出)

在这里插入图片描述

  • 自减运算:和自增运算一样,只是变成-1

自增自减是一个计算,不能给它赋值。

赋值运算符

= += -= *= /= %=

比较运算符

比较运算符的运算结果肯定是一个boolean类型

> < >= <= == !=
不管是在基本数据类型还是在后期面向对象 == 永远比的是两个变量(常量)当中所存储的那个数据的地址。
常量在常量池中的地址。
对象在堆内存中的地址。

逻辑运算符

与 同真则真,遇假则假
或 有真则真,同假则假
非 非真就是假,非假就是真
异或 相同为假,不同为真
逻辑运算的结果一定是boolean类型

与 单双与& && 对于与运算,如果双与判断出来运算符左边为假右边就不进行计算。

&&的话左边一旦为假,右边无论真假,结果都是假,所以右边可以不运行

或 单双或 | ||

||的话左边一旦为真,右边无论真假,结果都是真,所以右边可以不运行

! 异或 ^

按位运算符

全部以二进制的形式参与运算

&
|
^ 异或
>> 按位右移:相当于删去后面的
<< 按位左移:相当于在后边补零

三目运算符

变量=布尔表达式 ? 值1:值二
布尔表达式的运算结果必须是个布尔boolean类型

如果布尔表达式的结果是true,则将值1赋予变量。
如果布尔表达式的结果是false,则将值2赋予变量。
它在一定程度语句上简化了if 语句的功能,但不能完全替代if的功能。

int a=5;
int b=6;
int min = a>b ? b : a;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!