JavaSE:数据类型与变量

目录

一、前言

二、数据类型与变量

(一)字面常量

(二)数据类型

(三)变量

1.变量概念

2.语法格式

3.整型变量

3.1整型变量

3.2长整型变量

3.3短整型变量

3.4字节型变量

4.浮点型变量

4.1双精度浮点型

4.2单精度浮点型

5.字符型变量

6.布尔型变量

7.类型转换

7.1自动类型转换(隐式)

7.2强制类型转换(显式)

8.类型提升

8.1int与long之间:int会被提升为long

8.2byte与byte的运算

(四)字符串类型

三、运算符

(一)算术运算符

[1. 基本四则运算符:加减乘除模(+ - * / %)](#1. 基本四则运算符:加减乘除模(+ - * / %))

[2. 增量运算符 += -= *= %=](#2. 增量运算符 += -= *= %=)

[3. 自增/自减运算符 ++ --](#3. 自增/自减运算符 ++ --)

(二)关系运算符

(三)逻辑运算符

[1.逻辑与 &&](#1.逻辑与 &&)

[2.逻辑 ||](#2.逻辑 ||)

[3.逻辑非 !](#3.逻辑非 !)

[4. 短路求值](#4. 短路求值)

(四)为运算符

[1.按位与 &](#1.按位与 &)

[2.按位或 |](#2.按位或 |)

[3.按位取反 ~](#3.按位取反 ~)

[4. 按位异或 ^](#4. 按位异或 ^)

(五)移位运算

[1. 左移 <<](#1. 左移 <<)

[2. 右移 >>](#2. 右移 >>)

[3. 无符号右移 >>>](#3. 无符号右移 >>>)

(六)条件运算符

四、总结


一、前言

哈喽,大家好!今天蜡笔小欣要跟大家讲解JavaSE的数据类型与变量、运算符,看完之后一定能够让你们清晰明了。

二、数据类型与变量

(一)字面常量

定义:常量即程序运行期间,固定不变的量 称为常量,比如一天24小时,人的性别等。

给大家举个栗子:

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        System.out.println(10);
        System.out.println(66.6);
        System.out.println('A');
        System.out.println(true);
        System.out.println(false);

    }
}

运行结果如下:

这上面的10、66.6、'A'、true和false都是常量,因此我们称其为字面常量。

字面常量的分类:

  1. 字符串常量:由**" "**括起来的,比如"12345"、"hello"、"你好"。

  2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000

  3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49

  4. 字符常量:由单引号括起来的当个字符,比如:'A'、'1'

  5. 布尔常量:只有两种truefalse

  6. 空常量:null

(二)数据类型

在Java中数据类型主要分为两类:基本数据类型引用数据类型

基本数据类型有四类八种

  1. 四类:整型、浮点型、字符型以及布尔型

  2. 八种:

|----------|---------|----------|-------------------|
| 数据类型 | 关键字 | 内存占用 | 范围 |
| 字节型 | byte | 1字节 | -128 ~ 127 |
| 短整型 | short | 2字节 | -32768 ~ 32767 |
| 整型 | int | 4字节 | -2的31次方~2的31次方-1 |
| 长整型 | long | 8字节 | -2的63次方~2的63次方-1 |
| 单精度浮点数 | float | 4字节 | 有范围,一般不关注 |
| 双精度浮点数 | double | 8字节 | 有范围,一般不关注 |
| 字符型 | char | 4字节 | 0 ~ 65535 |
| 布尔型 | boolean | 没有明确规定 | true 和 false |

(三)变量

1.变量概念

在程序中经常改变 的内容,我们称为变量。而数据类型就是用来定义不同种类变量的。

2.语法格式

数据类型 变量名 = 初始值;

举个栗子:int age = 18;

3.整型变量

整型变量分为整型变量、长整形变量、短整型变量、字节型变量

3.1整型变量
java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
 //方式一:在定义时给出初始值
        int a = 6;
        System.Out.println(a);
//方式二:在定义时没有给初始值,但使用前必须设置初值
        int b;
        b = 10;
        System.Out.println(b);
    }
}

int的包装类型为 Integer,在这里小欣推荐使用方式一定义,如果没有合适的初始值,可以初始化为0。

3.2长整型变量
java 复制代码
long a = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
long b = 10l; // 一般更加以加大写L,因为小写l与1不好区分

long的包装类型为Long,长整型变量的初始值后加L或者l,小欣推荐加L,因为小写l与1不好区分。

3.3短整型变量
java 复制代码
short a = 10;
System.Out.println(a);

short的包装类型为Short。

3.4字节型变量
java 复制代码
byte b = 8;
System.Out.println(b);
System.Out.println(Byte.MIN_VALUE);// byte型变量所能表示的范围:
System.Out.println(Byte.MAX_VALUE);

字节的包装类型为Byte,它在任何系统下都占1个字节。

4.浮点型变量

4.1双精度浮点型
java 复制代码
double a = 6.66;
System.Out.println(a);

double的包装类型为Double,小欣有话说:double类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 会存在一定的精度误差 ,因此浮点数是个近似值,并不是精确值。

注意:在 Java 中, int 除以 int 的值还是 int(会直接舍弃小数部分)。如果想得到小数类型,需要使用 double 类型计算。

下面举个例子:

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        double a = 10.2;
        double b = 2.0;
        System.out.println(a / b);
    }
}

输出结果为:

4.2单精度浮点型
java 复制代码
float a = 6.2f; //也可以写成6.2F
System.out.println(a);

float的包装类型为Float,由于float表示的数据精度范围较小, 因此我们在程序上用到浮点数都优先使用double。

5.字符型变量

java 复制代码
char c1 = 'A'; // 大写字母
char c2 = '10'; // 数字字符
System.out.println(c1);
System.out.println(c2);
char c3 = '哈';//存放整形
System.out.println(c3);

.在Java 中我们使用 单引号' ' + 单个字母的形式表示字符字面值,计算机中的字符本质上是一个整数,一个中文字符占用两个字节,所以在可以用字符型变量存放中文。

6.布尔型变量

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        boolean a = true;
        System.out.println(a);
        boolean b = false;
        System.out.println(b);
    }
}

. boolean的包装类型为Boolean,

它与C语言不一样,在Java中,尔类型的变量只有两种取值, true 表示真, false 表示假,而不是像C语言当中的0表示假,非0表示真,而且Java中boolean类型不能与int类型进行转换。

7.类型转换

Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)

7.1自动类型转换(隐式)
java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        int a = 8;
        long b=2L;
        b=a;//可以编译
        a=b;//编译失败
    }
}

当数据范围小的int类型a赋值给b时,会自动转换为数据范围大的long类型;但如果让数据范围大的long类型转换为数据范围小的int类型,则编译失败,因为可能会造成数据丢失。

7.2强制类型转换(显式)
java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        int a = 8;
        long b=2L;
        a=(int)b;//强制类型转换
    }
}

还是上面的代码,如果一定要将数据范围大的long类型转换为int类型,只能使用强制类型转换,这样就可以编译成功,但可能会造成数据丢失。

Tips:

强制类型转换不一定能成功,不相干的类型不能互相转换,比如boolean类型与int类型不能互相转换。

8.类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

8.1int与long之间:int会被提升为long
java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        int a = 10;
        long b = 6;
        int c = a + b;//报错编译失败
        long d = a + b;//编译成功
    }
}

我们一起看上面这个代码,当数据类型比较小的int与数据类型比较大的long进行运算时,会把数据类型小的提升为数据类型大的,所有上面就是把int类型的a提升为long类型,再与b进行计算,所以用int类型来接收就会报错,得用long类型才能成功运行。

8.2bytebyte****的运算
java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        byte a = 2;
        byte b = 6;
        byte c = a + b;
        System.out.println(c);//程序报错
    }
}

当你们看到这个代码,可能会想这两个同种类型的运算为什么也会报错呢?小欣跟你们说虽然 a 和 b 都是 byte类型, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 所以就会报错。

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        byte a = 2;
        byte b = 6;
        byte c = (byte) (a + b);
        System.out.println(c);//程序成功运行
    }
}

我们只要将他们强制转换为byte,就能够成功运行,输出计算的结果。

(四)字符串类型

我们再Java中使用String类定义字符串类型。

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = " Friends";
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 + s2); //s1+s2表示将s1和s2的内容进行拼接
    }
}

三、运算符

(一)算术运算符

1. 基本四则运算符:加减乘除模**(+ - * / %)**

1.做除法和取模时,右操作数不能为0。
2.% 不仅可以对整型取模,也可以对 double 类型取模,但是意义不大,一般都是对整型取模。
3.两侧操作数类型不一致时,类型小的向类型大的提升。

2. 增量运算符+= -= *= %=

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        int a = 10;
        a += 20; //相当于 a = a + 20
        System.out.println(a); 
    }
}

运行结果:

3. 自增**/**自减运算符++ --

++是给变量的值+1,--是给变量的值-1。

举个例子:

java 复制代码
public class Demo5_1 {
    public static void main(String[] args) {
        int a = 9;
        int b = 10;
        a++; // 后置++表示给a的值加1,此时a的值为10
        System.out.println(a);
        System.out.println(a++); //注意后置++是先使用变量原来值,表示式结束时给变量+1,因此输出11
        ++b; // 前置++ 表示给b的值加1
        System.out.println(b);
        System.out.println(++b); //注意前置++是先给变量+1,然后使用变量中的值,因此输出12
    }
}

输出结果:

(二)关系运算符

关系运算符主要有六个 : == != < > <= >= ,其计算结果是 true 或者 false。
注意:当需要多次判断时,不能连着写,比如: 3 < a < 5,而是要写成(3 < a && a < 5)。

(三)逻辑运算符

逻辑运算符主要有三个 : && || ! ,运算结果都是 boolean 类型。

1.逻辑与**&&**

语法规则:表达式 1 && 表达式 2 ,左右表达式必须是 boolean类型的结果。两个表达式都为真,结果才是真,只要有一个是假,结果就是假。

2.逻辑**||**

语法规则:表达式 1 || 表达式 2 ,左右表达式必须是 boolean 类型的结果。
注意:左右表达式至少有一个位真,则结果为真。

3.逻辑非**!**

语法规则: ! 表达式 。真变假,假变真。

4. 短路求值

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

(四)为运算符

1.按位与**&**

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

我们看看下面这个例子:

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a & b);//输出结果为0
    }
}

进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100进行按位运算。

2.按位或**|**

如果两个二进制位都是0, 则结果为0, 否则结果为1。
**Tips:**当 & 和 | 的操作数为整数 (int, short, long, byte) 的时候 , 表示按位运算 , 当操作数为 boolean 的时候 , 表示逻辑运算。

3.按位取反**~**

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

4. 按位异或**^**

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

Tips:
参加运算的两个对象,如果两个相应位相同为0,相异为1。

异或的几条性质:

  • 1.交换律
  • 2.结合律 (a^b)^c == a^(b^c)
  • 3.对于任何数n,都有 n^n=0,n^0=n
  • 4.自反性: a^b^b=a^0=a;

(五)移位运算

移位运算符有三个 : << >> >>> ,都是二元运算符,且都是按照 二进制比特位 来运算的。计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 的 N次方的时候可以用移位运算代替。下面让我们一起去了解这三种移位运算。

1. 左移**<<**

最左侧位不要了, 最右侧补0。注意在向左移位时,丢弃的是符号位,因此正数左移可能会编程负数。左移 1 位 , 相当于原数字 * 2. 左移 N 位 , 相当于原数字 * 2 的 N 次方。

2. 右移**>>**

最右侧位不要了 , 最左侧补符号位( 正数补 0, 负数补1)。右移 1 位 , 相当于原数字 / 2. 右移 N 位 , 相当于原数字 / 2 的 N 次方。

3. 无符号右移**>>>**

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

(六)条件运算符

条件运算符只有一个 : 表达式1 ? 表达式 2 : 表达式 3
当 表达式 1 的值为 true 时 , 整个表达式的值为 表达式 2 的值 ;
当 表达式 1 的值为 false 时 , 整个表达式的值为 表达式 3 的值 .
这也是 Java 中唯一的一个 三目运算符 , 是条件判断语句的简化写法 .
举个栗子:

java 复制代码
public class Demo1_1 {
    public static void main(String[] args) {
        //求两个整数的最大值
        int a = 10;
        int b = 20;
        int max = a > b ? a : b;
        System.out.println(max);
    }
}

输出结果如下:

四、总结

通过上面对JavaSE的数据类型与变量、运算符的学习,相信大家都已经学会了,而且对这些操作更加熟练,要学好Java,这些基础一定要熟练掌握,在后面写程序时,会经常用到。这一期我们到这里就结束了,感谢大家的支持,我们下期再见!!!

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a11177611 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao11 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf