Java的数据类型与运算符

Java的数据类型与运算符,第1张

Java的数据类型运算

目录

一、用IDEA写Java程序

 二、Java中数据类型

布尔类型变量

字符串类型变量

final 关键字修饰的常量

三、 理解类型转换

 四、理解数值提升

 int和long的混合运算

byte 和 byte 的运算

五、Java中的运算符

1.算术运算符

2.关系运算符

3.逻辑运算符

逻辑与 ——&&

逻辑或  ——||

逻辑非 !

短路求值

4.位运算符

按位与 &:

按位或 |:

按位取反 ~:

按位异或 ^:

5.移位运算

6.运算符优先级


一、用IDEA写Java程序

上一节我们简单认识了Java的main函数,并了解了用记事本如何书写简单的Java程序。

但是用记事本写只是方便我们了解Java程序编译运行的原理,我们真正还是要选择合适的编译工具。

这节我们选择用最常用的工具——IDEA来写Java程序。

(用之前记得先配置好相应的环境)

IntelliJ IDEA的下载的地址:IDEA官网。

1.进入主页面点击左上角:file>new>project

 2.取合适的项目名称,选好路径

 3.选择 src>New>Java Class 

 4.取一个合法的类名 回车即可开始写Java程序 

 

5.编写Java程序。

 6.最后只要点代码左边绿色的开始键 或者 单击鼠标右键选择run行即可运行。

 

 二、Java中数据类型

Java中基本数据类型细分为:

 

(这个水印挡住字了,不过话说还不知道怎么去水印QAQ)

回归正题,上节说到布尔类型变量——

布尔类型变量

基本语法格式:

boolean 变量名 = 初始值;

代码示例:

boolean value = true;

System.out.println(value);

注:1.boolean 类型的变量只有两种取值,true 表示真, false 表示假。

2. Java 的 boolean 类型和 int 不能相互转换,不存在 1 表示 true, 0 表示 false 这样的用法。

3. boolean 类型有些 JVM 的实现是占 1 个字节,有些是占 1 个比特位,这个没有明确规定。

字符串类型变量

 基本语法格式:

String 变量名 = "初始值";

代码示例:

String name = "zhangsan";

System.out.println(name);

注:1.和上面的类型不同, String 不是基本类型, 而是引用类型。

2.字符串中的一些特定的不太方便直接表示的字符需要进行转义。

1、 字符串的 + *** 作, 表示字符串拼接:(注意:俩字符串拼接,打印结果中间没有空格)

public class testdemo {
    public static void main(String[] args) {
        String a = "hello";
        String b = "world";
        String c = a + b;//打印结果为helloworld  中间无空格
        System.out.println(c);
    }
}

2、字符串和整数进行拼接:

public class testdemo {
    public static void main(String[] args) {
        String str = "result = ";
        int a = 10;
        int b = 20;
        String result = str + a + b;
        System.out.println(result);// 执行结果:result = 1020
    }
}

 归纳:当Java在输出时,先碰到 "字符串"+ 的时候,就会默认后面都执行字符串拼接 *** 作;如果第一个不是字符串,则先执行正常的运算。

【例如上述代码改成:System.out.println(a+b+str),则输出“30result=”】

final 关键字修饰的常量

一旦被final修饰,则在程序运行的过程中,不能再次被修改。即在程序编译时,就已经确定其值了。

(而变量,则是在程序运行过程中才能知道里面的是几)

 

三、 理解类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有严格的校验。

先看一个例子:

 结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行。

类比理解一下:假如有水杯1、水杯2。

 水杯1的容量大于水杯2。

则将水杯2的水倒入水杯1是保证能被装下的,(即绝对不会超出范围,不会报错),而水杯1的水倒入水杯2则不一定能被完全装下。

 结论:

1. 强制类型转换可能会导致精度丢失。如刚才的例子中,赋值之后, 10.5 就变成 10 了,小数点后面的部分被忽略。

2. 强制类型转换不是一定能成功,互不相干的类型之间无法强转。(例如布尔值与整型之间不能转换,这与C语言有很大区别,Java中的布尔值只有true和false,没有1或0的表示形式)

 四、理解数值提升

 int和long的混合运算

 

 结论:

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

byte 和 byte 的运算

 

结论:byte和byte都是相同类型,但是居然出现编译报错。虽然a和b都是byte,但是计算a+b会先将a和b都提升成int,再进行计算,得到的结果也是int,这是赋给c,就会出现上述错误。

由于计算机的CPU通常是按照4个字节为单位从内存中读写数据。如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。

正确的写法:(要用强制类型转换)

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c); 
五、Java中的运算符 1.算术运算符
  1. 基本四则运算符 +      -     *     /     %
  2. 增量赋值运算符 +=    -=   *=   /=   %=
  3. 自增/自减运算符 ++   --

需要额外注意的是,

  • 除法中 int/int结果还是int,无论你是否用double接收。
  • int a = 1;
    int b = 2;
    System.out.println(a / b); // 结果为 0
  • 0不能作为除数。
  • % 表示取余, 不仅仅可以对 int 求模, 也能对 double 来求模。
2.关系运算符

关系运算符主要有六个: ==    !=    <    >    <=   >=

注意:关系运算符的表达式返回值都是:boolean 类型。

3.逻辑运算符

逻辑运算符主要有三个: &&    ||    !

逻辑与 ——&&

规则: 两个 *** 作数都为 true, 结果为 true, 否则结果为 false。

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);//输出为true
逻辑或  ——||

规则: 两个 *** 作数都为 false, 结果为 false, 否则结果为 true。

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c); //输出为true
逻辑非 !

规则: *** 作数为 true, 结果为 false; *** 作数为 false, 结果为 true。(注:这是个单目运算符,仅有一个 *** 作数)

短路求值

&& 和 || 遵守短路求值的规则。

System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

由上面例子能看出,要是计算到右侧表达式,则一定会报错,可是结果却没有报错,说明压根没有执行到右侧的表达式就已经得出结果了。

结论:

1. 对于&&,如果左侧表达式值为false,则表达式的整体的值一定是false,无需计算右侧表达式。

2.对于||,如果左侧表达式值为 true,则表达式的整体的值一定是true,无需计算右侧表达式。

4.位运算符

位运算符主要有四个:&     |     ~     ^

按位与 &:

如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。

int a = 10;
int b = 20;
System.out.println(a & b); 

进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100,再进行对应位的比对,最后转为十进制输出。

按位或 |:

如果两个二进制位都是 0,则结果为 0,否则结果为 1。

(运算方式同上)

注意:当 & 和 | 的 *** 作数为整数(int, short, long, byte) 的时候,表示按位运算,当 *** 作数为 boolean 的时候,表示逻辑运算。

按位取反 ~:

如果该位为0,则转为 1,如果该位为 1,则转为 0。

int a = 0xf;
System.out.printf("%xn", ~a);

注意:

0x前缀的数字为十六进制数字。十六进制可以看成是二进制的简化表示方式。一个十六进制数字对应4个二进制位。0xf 表示十进制的15, 也就是二进制的1111。

按位异或 ^:

如果两个数字的二进制位相同,则结果为0,相异则结果为1。

5.移位运算

移位运算符有三个:<<        >>        >>>

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

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

无符号右移 >>>:最右侧位不要了,最左侧补0。

结论:

1. 左移 1 位, 相当于原数字 * 2 ;左移 N 位, 相当于原数字 * 2 的N次方。

2. 右移 1 位, 相当于原数字 / 2 ;右移 N 位, 相当于原数字 / 2 的N次方。

3.由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替。

6.运算符优先级

如下表所示。可以稍微记忆一点,一般写程序直接要先的打上括号即可,优先级一般只有部分考试题目会用到。

 to be continue →

欢迎大家互相探讨交流补充 欢迎捉虫!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4687543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存