Java基础学习第三节——数据类型与运算符、短路

数据类型&表达式

课程回顾:

定义一个类的语法: class 自定义类名

声明变量的语法: 数据类型 变量名;

主函数语法:public static void main (String[] args) {

打印语句: System.out.println();

  1. 课程介绍
    ===========
    1. 数据类型(掌握)
    1. 数据类型的转换(掌握)
    1. 表达式 (掌握)
    1. 运算符 (掌握)

2.数据类型的分类structure:

2.1 基本数据类型 * 8 (原生类型)

以下是Java预定义好的类型8个

  1. 整数类型

byte 8 [-128,127]

short 16 [-32768-32767]

int 32 [-2147483648,2147483647]

long 64

  1. 小数类型(浮点型)

float 32

double 64

  1. 字符类型

char 16

  1. 布尔类型

boolean 1

image

2.2进制的了解:推荐使用(除二取余法和分权求和法)

image

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

练习一个 87

代码:

class System01{

public static void main(String[] args) {

int n1 = 15;

int n2 = 017;

int n3 = 0xf;

二进制输出语句

System.out.println(n2);

System.out.println(n3);

System.out.printf("%o\\n",n2);//按8进制输出

System.out.printf("%x\\n",n3);//按16进制输出

}

}

2.3基本数据类型-整数类型

byte(8) short(16) int(32) long(64)

byte的范围 [-128,127]

2.4基本数据类型-浮点型(小数)

1、

float 32位 单精度

double 64位 双精度

任何的一个数据都是有一个默认类型的 浮点数默认类型是 double

System.out.println(3.14); 3.14的类型是double

在这里插入图片描述

3.0的类型是
double,现在在把一个double值赋值给float变量,float精度比double低一些,

感觉3.0小数位并没有多长,感觉float可以存储下的,为什么还报错呢?编译器只看类型

  1. float double 都不能够精确的表示一个小数

double d = 3.0 其实表示的是一个无限接近于3.0的一个数据

在这里插入图片描述

在一些精度要求比较高的领域使用float double 就不太好,例如上天、下海…

在后面学习一个精确的表示小数的一个类型 BigDecimal

  1. 小数的常见的表示形式
>   ① 直接使用一个小数 3.14

>   double d = 3.14;

>   float f = 3.14f 或者 3.14F

② 使用科学计数法(了解)

>   double d = 3.14e2;

>   double d = 3.14e2; //3.14乘以10的2次方

>   System.out.println(d); //314.0

>   d = 3.14e-2; // 3.14除以10的2次方

>   System.out.println(d); //0.0314

2.5基本数据类型-字符型

  1. 计算机中的单位:

bit比特 表示一位 1位==1bit

1 byte字节 = 8bit

1KB = 1024byte

1MB=1024KB

1G=1024MB

1T=1024G

  1. char 16位(2个字节)

  2. 常见的几种表示形式

    1. 直接使用一对单引号 ‘1’ ‘a’ ‘在’…; ‘’ 中只能够写一个符号

最常用的表示形式

  1. 可以使用一个整数表示一个字符

例如现在我希望把 “好” 存储到计算机中?

设计到一个叫字符编码 : 假设我自己搞一套编码表

好 — 123

的 — 12345

吧 — 9527

  1. (了解)和iic差不多,’\uxxxx’ xxxx代表的是一个字符对应的数字的16进制表示形式

char c = ‘A’

c = 65;

// 65 —> 16进制 41

c = ‘\u41’ 编译报错,16进制的数据必须是4位,不足4位前面使用0补齐

c=’\u0041’

  1. 特殊的符号

在控制台输出一个 ‘

char c = ‘’’; 感觉可以吗? 单引号是有特殊意义的,会让编译混乱…

编译报错

可以使用一个转义符号把特殊的符号转义一下 \

char c = ‘\’’

想输入一个\

char c = ‘\’ 可以吗? \现在有特殊意义 转义

应该是: char c = ‘\\’;

\’ ---- ‘

\\ ---- \

\” ---- “

\t — tab

\r ---- 回车符

\n — 换行符

经常回车换行一起使用 \r\n

char表示16位的Unicode字符,Java对字符采用Unicode字符编码。Unicode收集了世界上所有语言文字中的字符,是一种跨平台的编码方式,Java的字符占两个字节,可以表示一个汉字,字符常量使用单引号
’ ’ 括起来。

char前256个字符和ASCII(美国信息交互标准编码)码中的字符重复,可查ASCII表

在这里插入图片描述

2.6基本数据类型-布尔型

boolean 1 它的值就只有两个 true false

boolean b = true;

在计算机的底层其实就是使用 0 1 表示和存储,但是Java中不能够直接把1 0
赋值给boolean类型的变量

boolean b = 1;

boolean一般用在什么地方呢?

一般就是一些条件判断,if for循环。。。

2.7引用数据类型 * n

  1. 类 一个类也就是一种类型

String 是Java中写好的一个类,也是一种类型,描述的是字符串

String str = “ksdfj”

class A{}

A xx = ? // 面向对象的时候给大家说值是什么 就是对象

  1. 接口

  2. 枚举

  3. 数组
    。。。。。等等等等

引用数据类型-简单了解String (注意思维的转变)

  1. 包括类、接口、枚举、数组…
>   既然类就是一个引用类型

>   String s;

>   自定义一个类:

>   class Hello{}

>   Hello h;
  1. 目前简单了解String
>   String 是Java中写好的一个类,也是一个类型,表示字符串

>   String s = “akdh”;

>   String s = "Hello 高薪!";

>   System.out.println(s);

>   定义一个String;

在这里插入图片描述

  1. 字符串的链接效果 +
>   字符串和任意的其它类型的数据使用 + 都表示连接

>   String s1 = "Hello";

>   String s2 = "高薪";

>   System.out.println(s1+s2);

>   System.out.println(s1+5); // Hello5

>   int i = 5;

>   System.out.println(s1+i); //Hello5

>   System.out.println('A'+'B'); //?

>   AB : 感觉连接了? 没有字符串,+ 不是连接的作用

>   6566 : 感觉还是连接,只是连接是数字

>   131 : 正确:

>   原因: byte short char 在参与算术运算的时候会自动类型提升为int

!在这里插入图片描述

在这里插入图片描述

2.8数据类型过长和溢出

1、

byte b = 128; 直接编译报错,超出范围装不下

2、

byte b1 = 3;
OK,细想应该报错啊,3的类型是int,把int存储到byte中为什么不报错呢?
原因: 只要后面的值在byte的范围内,编译器会自动的隐式转换

int i = 3;
byte b = i; // 编译报错,编译的时候报错
原因:
编译器在编译的时候看到是把一个int类型的变量赋值给byte类型,而编译器不知道变量i中的值是多少,只看到类型不匹配

3、

int i = 3;

double d = i; // OK的 d中是按照double的形式存储3会有小数的部分

int j = d; // 编译报错,编译器看到是在把一个double赋值给一个int

在这里插入图片描述

3类型转换(目前只针对基本类型)

基本数据类型的数字类型,可以把char当成一个数字使用

byte8 short (char)16 int32 long64 float32 double64

--------------------------------------------------------------------------------------》

从左到右,精度越来越高

疑问: float 和 long的位置

测试代码:
long a = 3.14f; 编译报错,可能有精度损失
float f = 123L; 编译OK
结论: float的精度比long更高
浮点型和整型存储方式不一样,不能够单纯的从位数来看

① 示例:

int i = 1;
double d = i; // 表示把变量i中的值复制一份,存放到d变量中

② 可以把低精度的直接赋值给高精度的变量 — 自动类型转换

double d = 123;

③ 特殊情况:

3.1强制类型转换

①单个类型强制转换

在这里插入图片描述

②多个类型强制转换

在这里插入图片描述

为什么不能写成(byte)n1+(byte)n2+(byte)n3?

  1. 语法规定转换符只能写在规定的位置

  2. 有运算符不能强制转换

③String引用类型和 int之间也经常强转

image

3.2自动隐式转换

在这里插入图片描述

3.3强制隐式转换

image

4.表达式

>   表达式 : 就是由一系列的 常量, 变量,运算符,() 等组成的一个算式

>   例如:

>   3+2-5;

>   int a = 5; ==

>   double d = 1.456;

>   byte b = 22;

>   a + (d - b) \* 10 / 3

>   我们写一个表达式的作用(目的)是啥?

>   按照一定的规则计算出一个结果值

>   ? xx = a + (d - b) \* 10 / 3 // 表达式的结果值我们应该使用什么类型来接收

>   double xx = a + (d - b) \* 10 / 3;

>   表达式的结果值的类型 : 整个表达式中精度最高的类型

>   测试:

>   byte b1 = 3;

>   byte b2 = 5;

>   ? b3 = b1 + b2;

>   应该使用int 而不是byte: byte short char 在参与运算的时候会自动类型提升为 int

5.运算符&运算

运算符就是一种特殊符号,用来表示数据的算数运算、赋值运算、比较、逻辑运算、位运算、三目运算、等操作,常见的分类有如下几种。

5.1算数运算(ArithmeticOperators)

+ - * / % ++ - -

5.2 +

  1. 表示加法运算

  2. 字符串的连接 : +符号的两边至少有一边是字符串的时候才是连接

‘A’ + ‘B’ --> 131

  1. 表示正数,一般省略不写

5.3 -

  1. 表示减法运算

  2. 表示负数

5.4 *

  1. 表示乘法运算

  2. 正则表达式中表示匹配所有

5.5 /

  1. 表示除法运算

  2. 特点:

System.out.println(10/3); // 3 原因: 10 3
都是int类型,表达式的结果也是int类型(参考上面的表达式的部分内容)

5.6 %

  1. % 表示取模(求余数)
>   System.out.println(10%1);

>   System.out.println(10%2);

>   System.out.println(10%3);

>   System.out.println(10%4);

>   System.out.println(10%5);

>   System.out.println(10%6);

>   System.out.println(10%7);

>   System.out.println(10%8);

>   System.out.println(10%9);

>   System.out.println(10%10);

>   System.out.println(10%11); // 10

>   // 接下来的东西玩玩而已: 一般模运算都是整数

>   System.out.println(11.11%11); //

5.7 ++ –

  1. ++ 表示自增; – 表示自减

  2. 回顾上面的其它的运算符(+ - * /)都是需要两个操作数,++ – 只需要一个操作数

  3. ++ – 只能够应用于变量,不能用于常量

5++ 错误的;
int i = 3;
i++; 正确的

  1. 基本语法规则

int i = 3; // 表示把3赋值给变量i,此时i变量盒子中的数据就是3;

i++; // 表示变量i的值会在之前的值的基础上自动增加1,它的值此时是4;

++i; // 表示变量i的值会在之前的值的基础上自动增加1,它的值此时是 5;

  1. 偶尔可能会见到的写法

    int i = 3;

    int j = i++;

    System.out.println(“i=”+i); //4 3

    System.out.println(“j=”+j); //3 4

在这里插入图片描述

6、偶尔可能会见到的写法

int i = 3;

int j = ++i;

System.out.println(“i=”+i); //4

System.out.println(“j=”+j); // 4
  1. 开发中几乎不会看到的写法
int i = 3;

i = i++;

System.out.println(“i=”+i); // 3

int i = 3;

i = ++i;

System.out.println(“i=”+i); // 4

1.  变态版

int a = 3;

int b = a++ + a++ + a++;

int c = ++a + ++a + ++a;

a =

b =

c =

在这里插入图片描述

5.8赋值运算(AssigningOperator)

1、 = += -= *= /= %=

2、赋值运算符的特点: 把符号右边的值赋值给左边,运算优先级很低

3、请把 += 看成是一个符号,不要看成是两个符号

4、具体的规则:请看示例

>   int a = 6;

>   a += 4; // 表示累加; 表示在a原来的值(6)的基础上累加一个4 ,结果值10

>   // 也可以看成是 a = a+4;

>   a -= 2; // a---8 也可以看成是 a = a-2;

>   a \*= 10 // 80

>   a /= 5 // 16

>   a %= 2 // 0
  1. 注意1 : 如果一个变量没有值(局部变量)是不能够直接+=这样赋值
>   int a;

>   a += 2; // 编译报错

在这里插入图片描述

  1. 经历了多年的面试题
>   int a = 3;

>   a += 2;

>   System.out.println(a) ;

>   上面的代码也可以写成:

>   int a = 3;

>   a = a + 2;

>   System.out.println(a) ;

在这里插入图片描述
5.9比较运算(ComparisonOperators )

== != > < >= <=

instanceof(面向对象部分讲解)

  1. 比较运算的结果都是布尔类型、

  2. == 比较两个数据是否相等

  3. 。。。

  4. instanceof 判断一个数据是否是某种类型

① 仅仅用于引用数据类型,不能够用于基本数据类型

② 示例:
int a = 5;
a instanceof int
想判断a变量是否是一个int类型,但是不能够用于基本类型编译报错
正确的用法:
String str = “看卡时间的话”;
boolean b = str instanceof String ;
判断str变量的类型是否是String(判断str是否是String的实例)

6逻辑运算(LogicalOperators)

  1. 逻辑运算符有如下:

& 逻辑与 相当于 and 并且 两边都为true结果为true

| 逻辑或 相当于 or 或者 只要有一边为true,结果true

&& 逻辑与(双与) 相当于 and 并且 两边都为true结果为true

|| 逻辑或(双或) 相当于 or 或者 只要有一边为true,结果true

^ 异或 两边不一样结果true,否则为false

! 逻辑非 把true变成false 把false变成true

  1. 简单理解: 多条件组合使用

  2. 看场景:

小明本次考试Java,JS
如果小明本次考试 Java 和 JS都是100分,奖励一台电脑;
如果小明本次考试 java 或者 JS 是100分,奖励源码时代代金券 5000元;
把上面的场景使用伪代码表示:

int java = 100;

int js = 99;

如果 java==100 并且 js == 100 ----> 奖励电脑

if(java==100 & js == 100)

如果 java==100 或者 js == 100 ----> 代金券5000

if(java==100 | js == 100)

  1. 逻辑运算符两边一般都是boolean类型 (!只有一边)

  2. 逻辑运算的结果值类型 :boolean

  3. & VS &&

| VS || 他们的区别(重点,必须要清楚)
① && || 只可以是逻辑运算
& | 可以是逻辑运算符也可以是位运算符
哪如何区分呢? 看两边的类型

② && || 具有短路行为
什么时候会短路:如果左边的条件能够确定整个表达式的结果值,那么右边就不运算了
&& : 左边为false短路
|| : 左边为true短路
(1==2) && (3==3) // 左边是false,断定结果肯定是false,所以右边不会执行运算了
(1==2) & (3==3) // 没有短路行为,两边都需要计算执行

③ 问题 : 我们怎么验证它短路了?
思路1: 可以在右边使用一些自增的语句,从结果来看值的变化
思路2: 右边部分中包含一个错误(异常)

7(暂时属于了解内容)位运算符(BitOperator) 按照数字的二进制位进行操作(了解)

& 两个位都为1 结果为1 否则0

| 只要有一位为1 结果 1

^ 1-0 0-1 结果都为1 否则为0

~ 按位取反 1–》0 0–》1

<< 把二进制位向左移动

>> 把二进制位向右移动

>>> 无符号向右移动

如果涉及到负数:原码 补码 反码 (建议暂时不用管)

8三目运算(TernaryOperator) 或者 三元运算

语法格式:
X ? Y : Z

X:可以代表是boolean值,或者运算结果为boolean值

列子:

若X为true,那就返回Y值,若不为true就返回Z的值

若你要以变量存储,那么Y与Z必须返回同种类型

6课程总结

数据类型(小数,字符,布尔类型,字符串)

数据类型的转换

运算符(++ --)

三目运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值