JavaSE ---01 数据类型与运算符

简介: JavaSE ---01 数据类型与运算符

正所谓温故而知新,可以为师矣,虽然已经学过一遍javase,但是回头复习仍然能找到很多初学的时候遗忘的点,所以我们在学习的途中还是要保持空杯心态,这样才能走的更远,切忌眼高手低.

1.变量

说到变量大家都经常去使用,那么什么是变量呢?下面给出变量的定义

变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据.

类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性.

我们所讨论的"变量" 主要和我们的"内存" 这样的硬件设备密切相关

2.基本数据类型 (8个)

int     4
//注:int在java中与系统无关,都是4个字节
byte    1
float   4
double  8
long    8
char    2
boolean //java本身没有规定大小
short   2

2.1 int类型

int类型是4个字节 大小范围也就是 -2^31 - 2^31-1

System.out.println(Integer.MAX_VALUE); // int 的最大值
System.out.println(Integer.MIN_VALUE)//   int的最小值

注:这里的Integer我们可以暂且认为是int的包装类,可以先不去管他.

如果超出int的取值范围,也会发生溢出的情况,下面我们就可以使用更大的数据类型long(长整型)

2.2 long 长整型

 语法

long num = 10L; // 定义一个长整型变量, 初始值写作 10l 也可以(小写的 L, 不是数字1). 
System.out.println(num)

2.3 double 浮点型

注:java中int除以int仍然是int ,比如1/2 答案是0

double num = 1.1;
System.out.println(num * num)
// 执行结果
1.2100000000000002

这里小数的存储仍然是IEEE 754标准,所以仍然会有精度误差.

2.4 float数据类型

float num = 1.0f;    // 写作 1.0F 也可以
System.out.println(num);

这里加一个f的原因就是和double区分,但是精度不高,工程上用得不多.一般用double代替.

2.5 char 类型

char ch = 'A';
char a = '牛';

注:这里java中的char使用的是unicode编码而不是ascii编码,所以甚至支持中文,占用2个字节而不是c语言中的1个字节.

2.6 byte类型

这也是c语言没有的类型.

byte a = 10;

注:byte类型和char类型没关系.

2.7 短整型变量

short a = 10;
//不建议使用,因为范围较小

2.8 布尔类型变量

boolean flag = false;

注:java中的boolean类型中只有true和false,不存在0为假其他为真的情况,java中没有规定boolean的大小.

 

3.引用数据类型

3.1字符串类型

字符串拼接操作

String s = "Hello";
String s1 = "World";
String s3 =s + s1; //Hello World

注:

1. Java 使用 双引号+ 若干字符 的方式表示字符串字面值.

2. 和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释).

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

3.2 常见转义字符

转义字符 解释
\n 换行
\t 水平制表符
\' 单引号
\" 双引号
\\ 反斜杠

3.3 字符串+整数

结果是字符串

String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);
// 执行结果
result = 1020

4.类型转换

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

举例:

int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; //通过

大的类型不能赋值给小的类型,小的类型可以赋值给大的类型.

boolean类型不能和int相互转换.

4.1 强制类型转换

int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b = false;
b = (boolean)a; //报错

结论:
1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转

 

4.2 数值提升

4.2.1 int 和 long 做运算
int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.

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

 

4.2.2 byte自运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte c = a + b;

原因:虽然a和b都是byte,但是加起来的时候会转化为int再相加,将int赋给byte是行不通的

正确写法:(强转)

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

总结:

1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

4.2.3 int 和String直接的转换
int ->String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);

String ->int

String str = "100";
int num = Integer.parseInt(str);

相关文章
|
8月前
|
Java 编译器
【JAVASE】数据类型与变量(三)
【JAVASE】数据类型与变量
【JAVASE】数据类型与变量(三)
|
8月前
|
存储 Oracle Java
【JAVASE】数据类型与变量(二)
【JAVASE】数据类型与变量
|
8月前
|
存储 Java 编译器
【JAVASE】数据类型与变量(一)
【JAVASE】数据类型与变量
|
8月前
|
Java
|
4天前
|
存储 Java 编译器
JavaSE学习--数据类型和运算符
JavaSE学习--数据类型和运算符
62 0
|
6月前
|
存储 机器学习/深度学习 Java
【JavaSE语法】运算符
【JavaSE语法】运算符
43 0
|
6月前
|
存储 Oracle Java
【JavaSE语法】数据类型与变量
【JavaSE语法】数据类型与变量
36 0
|
7月前
|
存储 Java 编译器
基本语法、数据类型与运算符【JavaSE】
基本语法、数据类型与运算符【JavaSE】
19 0
|
10月前
|
存储 Oracle Java
【javaSE】 数据类型与变量
【javaSE】 数据类型与变量
|
10月前
|
Java 编译器
【JavaSE】解读数据类型与变量
解读数据类型与变量的介绍
51 0