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

本文介绍了Java中的变量概念,包括其在内存中的作用,以及八种基本数据类型(如int、long、double等)的特点和使用。此外,还详细讲解了字符串类型、类型转换(包括强制类型转换和数值提升)等内容。
摘要由CSDN通过智能技术生成

正所谓温故而知新,可以为师矣,虽然已经学过一遍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);

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值