java2---变量、关键字

char 代表两个字节的大小 16bit 2(16)

原理:将字符映射为码表中对应的十进制数据加以存储。

  1. 布尔型

boolean 占一个字节。只有true与false两个值。

6.2.2 变量的声明

格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;

案例:

int i 声明了一个整形的变量。

double d 声明了一个double数据类型的变量

float f 声明了一个float数据类型的变量。

备注:变量名的首字母都一般都是以小写字母开始。

6.2.3 变量的初始化

6.2.4 变量的初始化方式

初始化方式1: 数据类型 变量名字 = 数值。

初始化方式2: 数据类型 变量名字 , 变量名字 = 数值。

案例:

方式1: double d = 3.14;

方式2: double d ; d = 3.14 ;

7 java数据类型的转换

=======================================================================

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

1、 自动类型转换(也叫隐式类型转换)

可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001 short s = b; //00000000 00000001 int i = s; long lon = i; double d = lon; //1.0

自动类型转换(也叫隐式类型转换)

要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取

值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

例如:

byte b=100; int x=b; System.out.println(x);//程序把b结果自动转换为int类型。

2、 强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。

byte b = 100; b = b + 2; System.out.println(b);

上述例子发生了什么,发生了类型转换。

b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为

了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

byte b=1; b=(byte)(b+2);

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)

无法自动转换,此时就需要进行强制类型转换。

强制类型转换需要注意:

损失精度!!!

int a=128; byte b=(byte)a; System.out.println(b);//-128 /* * 此时的强转已经造成了数值的不准确 */

int

00000000 00000000 00000000 10000000

10000000

byte

再次分析此行代码

byte b = 100;

b = b + 2;

System.out.println(b);

编译:提示如下错误。

在这里插入图片描述

3、类型转换的原理

可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒入 2两 4两 8两的碗中。但是 4两碗的酒倒入1两碗的酒就有一些问题。

1、 什么时候要用强制类型转换

比如小数部分只想保留整数部分.

一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

public static void main(String[] args) { byte b = 100; b = (byte) (b + 2); System.out.println(b); // 102 //舍弃小数部分 double d=5.5; int num=(int)d; }

2、 表达式的数据类型自动提升

算术表达式,逻辑表达式

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析 System.out.println(‘a’+1)结果?

自动类型提升

byte b = 3; int x = 4; x = x + b;// b会自动提升为int 类型参与运算。 System.out.println(x);// 7

强制类型转换

byte b = 2; /* * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b */ b = (byte) (b + 2); System.out.println(b);// 4

思考1

byte b=126;

问:既然数据默认的有数据类型,那么126 默认是int类型的,为什么存储到byte类型时不会报错呢。

126 是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。

思考2:byte b=128;能否正常的编译和运行。

该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。

思考2

byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪一句编译失败?为什么?

b =3+4, 3和4都是常量,所以java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。例如b=128+1 就无法编译通过。b=127+1;也是无法通过。

b =b1+b2 不可以,因为b1 和b2 是变量,表达式求值时,变量值会自动提升为int型,表达式结果也就成了int型,这是要赋值给byte型的b,必须进行强制类型转换了。

6、System.out.println(‘a’+1)结果

美国人为了让计算机识别他们生活中的文字,让二进制表示生活中的文字.所以一个字母代表了一个二进制.,二进制也有十进制的表现形式.,把生活中的字母都用数字来标识,例如97 代表a ,98 代表 b。打印’a’就把a作为输出显示,没有疑问。但是 ‘a’+1 有加号涉及到了运算。根据java自动类型提升规则,同样道理 char 提升为int 。就把’a’代表的数字体现了出来。a 表示的是97 97+1就是98; 那么 想要查看98 表示的char 是什么 怎么实现呢 ?就要用到刚才介绍的强制类型转换了 System.out.println(char(‘a’+1));就取到了98 在ASCII码表中表示的字符。大写A 和小写a 在 ASCII有不同的表现。还有一个概念字符’1’ 在ASCII中 不是数字 1,可以运行代码查看,到此就可以明白了char 类型,char类型也是可以参与运算的,为什么可以参与运算呢。因为字符在ASCII表中都有对应的数字体现。所有的计算机兼容ASCII。

System.out.println(‘a’+1); //98

System.out.println((char)(‘a’+1)); //b

补充问题:

int i=‘a’+‘b’;

System.out.println(i);//结果?

System.out.println(“hello”+‘j’); //结果?

总结:

所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。

8 java运算符

===================================================================

8.1.算术运算符


在这里插入图片描述

正负号(+,-)

除法

%取模

求余数

取模的正负取决与被除数:

1. 自增

(++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;

后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增;

备注:参与自增运算的操作数据每次会加1.

结论:

如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如

果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。

自增自减运算符案例:

完成如下运算:

一;

int i = 10; int newNum = 10 * i++; System.out.println(newNum);//? 二: int i = 10; int newNum = 10 * ++i;//? System.out.println(newNum); //? 一可以理解为 int i = 10; int newNum = 10 * i; i = i + 1; 二可以理解为 int i = 10; i = i + 1; int newNum = 10 * i;

练习:

  1. 使用程序判断一个整数是偶数还是奇数

  2. 使用程序判断假设今天是星期4,那么问10天后的今天是星期几?

  3. 将数值表达式使用java程序翻译,并通过程序求出运算结果

其中int x=1;int y=2,int a=3,int b=4,int c=5;

案例一:

public static void main(String[] args) { // 判断一个整数一奇数还是偶数 int x = -100; // 奇数是,1,3,5...偶数是2,4,6...显然整数除2能整除,也就%(取模)结果为0就是偶数。 int result = x % 2; System.out.println(result); // 使用判断语句进行判断。 if (result == 0) { System.out.println(x + "是偶数"); } else { System.out.println(x + "是奇数"); } } 方案二 使用判断该数结果是否是奇数。 (但是该算法有问题,如果被判断的整数为负数是否有效?) public static void main(String[] args) { // 判断一个整数一奇数还是偶数 int x = 1; // 奇数是,1,3,5...偶数是2,4,6...显然奇数%的结果为1. int result = x % 2; System.out.println(result); // 使用判断语句进行判断。 if (result == 1) { System.out.println(x + "是奇数"); } else { System.out.println(x + "是偶数"); } } 改进 public static void main(String[] args) { // 判断一个整数一奇数还是偶数 int x = -1; // 奇数是,1,3,5...偶数是2,4,6...显然奇数%的结果为1. int result = x % 2; System.out.println(result); // 使用判断语句进行判断。 if (result != 0) { System.out.println(x + "是奇数"); } else { System.out.println(x + "是偶数"); } } 案例三:判断星期 public static void main(String[] args) { // 设定今天是星期1,用int 1表示星期一,0表示星期天 int today = 1; // 十天后是星期几?,一个星期是7天,7天之后又是星期1,可以用? int future = (today+10) % 7; if (future == 0) { System.out.println("10天后是星期天"); } else { System.out.println("10天后是星期:" + future); } } 案例4: int x = 1; int y = 2; int a = 3; int b = 4; int c = 5; int result = (3 + 4 * x) / 5 - 10 * (y - 5) * (a + b + c) / x + 9* (4 / x + (9 + x) / y); System.out.println(result); // 442

8.1 赋值运算符

= , +=, -=, *=, /=, %=

| 运算符 | 运算 | 范例 | 结果 |

| — | — | — | — |

| = | 赋值 a=3,b=2 | a=3, | b=2 |

| += | 加等于 | a=3,b=3,a+=b; | a=5,b=2; |

| -= | 减等于 | a=3,b=2,a-=b | a=1,b=2; |

| *= | 乘等于 | a=3,b=2,a*=b | a=6,b=2 |

| /= | 除等于 | a=3,b=2,a/=b | a=1,b=2; |

| %= | 模等于 | a=3,b=2,a%=b | a=1,b=2 |

a+=b 可以想象成 a=a+b;

变量声明完了之后,可以使用赋值语句(assignment statement)给变量赋一个值,Java中使用等号(=)作为基本的赋值运算符(assignment operator),

格式如下:

variable = expression;

变量 = 表达式;

变量我们已经知道如何声明,表达式具体如何定义?

表达式的定义:

表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在一起计算出的新值。

x =y+1;

例如:

public static void main(String[] args) { int x = 1; // 声明int变量x, 赋值1给变量x int y = 0; // 声明int变量y, 赋值0给变量y double area; // 声明double变量area double radius = 1.0; // 声明double变量radius,并赋值1.0给变量radius x = 5 * (3 / 2) + 3 * 2; // 将=右半部分表达式的计算结果赋值给变量x x = y + 1; // 将变量y和1的求和的值赋值给变量x area = radius * radius * 3.14159; // 将计算面积的值赋值给变量area }

赋值运算符小问题

问题1:

int x;

Syst2intln(x = 1);

如何理解?

答:等价于

x=1;

System.out.println(x);

注意:不能 1=x,变量名必须在赋值运算符的左边。

问题二:

int x;

int y;

int z;

x = y = z = 100;

如何理解?

答:等价于

int x;

int y;

int z;

z = 100;

y = z;

x = y;

问题三:

short s1 = 1;

s1= s1+1;

s1+=1;

问:s1= s1+1; s1+=1; 与有什么不同?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

8.2 比较运算符


如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?

比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。

运算符 运算 例子 结果

| == | 相等于 | 4= =3 | false |

| — | — | — | — |

| != | 不等于 | 4!= 3 | true |

| < | 小于 | 4 < 3 | flase |

| > | 大于 | 4>3 | true |

| <= | 小于等于 | 4<=3 | false |

| >= | 大于等于 | 4>=3 | true |

Instanceof 检查是否是类的对象 "hello"instanceof String true

注意的细节:

1.使用比较运算符的时候,要求两种数据类型必须一致。

byte、short、char 会自动提升至int。

在这里插入图片描述

8.3 逻辑运算符


什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。那么为什么要连接比较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去面试吗,不能,因为只满足了一项,总体是不满足的(总体结果为假)。

逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别同理,双或时,左边为真右边不参与运算。

“ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。

& 与 | 或 ^ 异或 ! 非

1、& 与

true & true = true ;

false & true= false;

true & false = false;

false & false= false;

总结 & 符号特点

& : 只要两边的boolean 表达式结果,有一个false.那么结果就是false

只有两边都为true ,将结果为true.

2、| 或

true | true =true;

ture | false =true;

false | true =true;

false | false =flase;

总结 | : 两边只要有一个为真结果就为真,当两边同为假时结果才为假.

3、^ 异或

true ^ true =false;

ture ^ false =true;

false ^ true= true;

false ^ false=flase;

^ : 两边相同结果是false

两边不同结果是true;

4、! 非

!true = false

!false= true

5、&& 短路

研究发现,&运算只有两边全为真的时候,结果才为真,那么当左边为假的时候就没有必要在进行判断,&&就产生了。

int a =4;

a >3 && a< 6;

a >3 & a< 6 ;

在这种情况下世没有区别的

如果:

a =2

a >3 & a< 6 2大于 3 为假, 接着运算 2 小于6 为真,总的结果为假

a >3 && a< 6; 此时a 不大于3 结果为false 右边不运算了.即短路.所以&& 比& 效率稍微高了一点.

public static void main(String[] args) {

int x = 0;

int y = 1;

if (x == 0 && y == 1) {

System.out.println(x + y);

}

}

8.4 位运算符


按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。

任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。

位(bit)运算符:

位运算符

运算符含义

& 与(AND)

| 或(OR)

^ 异或
取反

规则:

可以把1当做true 0当做false

只有参与运算的两位都为1,&运算的结果才为1,否则就为0。

只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。

只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。

1、& 与运算

& 参见运算的两位数都为1,&运算符结果才为1,否则就为0。

6&3

00000000 00000000 00000000 00000110 6

00000000 00000000 00000000 00000011 3

00000000 00000000 00000000 00000010 & =2

2、| 或运算

| 参与运算的两位都为0,|运算的结果才为0,否则就为1。

00000000 00000000 00000000 00000110 6

00000000 00000000 00000000 00000011 3

00000000 00000000 00000000 00000111 | =7

3、^ 异或运算

只有参加运算的两位不同,运算的结果才为1,否则就为0。

00000000 00000000 00000000 00000110 6

00000000 00000000 00000000 00000011 3

00000000 00000000 00000000 00000101 ^ =5

1、 ~ 反码

就是取反,二进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。

0000-0000 0000-0000 0000-0000 0000-0110 6

1111-1111 1111-1111 1111-1111 1111-1001 取反 -7

System.out.println(~6);//-7

结论:当参与取反的数值是正数时,把对应的值加上负号,再-1;

当参与取反的数值是负数时,把对应的值加上负号,再-1;

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!
系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-6wIwwwxq-1711375457882)]

[外链图片转存中…(img-OsxPCVCk-1711375457882)]

[外链图片转存中…(img-PRNcKasI-1711375457882)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

[外链图片转存中…(img-FMVYrNSS-1711375457883)]

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值