java变量与运算符

一 、变量与类型

变量:是指程序运行过程中可以改变的量,相当于在内存中开辟了一块内存空间来保存一些数据。
类型:对变量的种类进行了划分,不同类型的变量具有不同特性。
Java类型汇总:在这里插入图片描述

(一) 整型

1. 字节类型变量

基本语法格式:

byte 变量名 = 初始值;

示例:

byte value = 0;
System.out.println(value); 
//输出结果:0

注意:字节类型表示的也是整型,只占一个字节,表示的范围为(-2^7 ~ 2^7 - 1)

2. 短整型变量

基本语法格式:

short 变量名 = 初始值;

示例:

short value = 0;
System.out.println(value); 
//输出结果:0

3. 整型变量

基本语法格式:

int 变量名 = 初始值;

示例:

int value = 10;
System.out.println(value); 
//输出结果:10

4. 长整型变量

基本语法格式:

long 变量名 = 初始值;

示例:

short value = 10L; //L也可以是小写,即:10l
System.out.println(value); 
//输出结果:10

(二) 浮点型

1. 单精度浮点型变量

基本语法格式:

float 变量名 = 初始值;

示例:

float value = 10.0F; //L也可以是小写,即:10.0F
System.out.println(value); 
//输出结果:10.0

float 类型在 Java 中占四个字节, 遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用float。

2. 双精度浮点型变量

基本语法格式:

double 变量名 = 初始值;

示例:

double value = 10.0; 
System.out.println(value); 
//输出结果:10.0

(三) 字符型

char类型变量

基本语法格式:

char 变量名 = 初始值;

示例:

char value = 'A'; 
System.out.println(value); 
//输出结果:A

注意事项:
1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一
个字符占用两个字节, 表示的字符种类更多, 包括中文.

使用一个字符表示一个汉字:

char ch = '呵';
System.out.println(ch); 

执行javac的时候可能会出现以下错误:在这里插入图片描述

此时我们在执行 javac 时加上 -encoding UTF-8 选项即可 在这里插入图片描述

(四) 布尔类型

boolean类型变量

基本语法格式:

boolean 变量名 = 初始值;

示例:

char value = true; 
System.out.println(value); 
//输出结果:true

注意事项:
1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
2. Java 的 boolean 类型和 int 不能相互转换, **不存在 **1 表示 true, 非0 表示 false 这样的用法.
3. boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定

(五) 字符串类型

String类型变量

1. 介绍

基本语法格式:

String 变量名 = 初始值;

示例:

String str = "zhangshang";
System.out.println(str); 

注意事项:
1. Java 使用 双引号 + 若干字符 的方式表示字符串字面值.
2. 和上面的类型不同, String 不是基本类型, 而是引用类型.
3. 字符串中的一些特定的不太方便直接表示的字符需要进行转义

2. 字节串的 + 操作

此操作表示字符串的拼接

  1. 字符串之间的 拼接
String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);
  1. 字符串和整数的拼接:
String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);
// 执行结果:
result = 1020
  1. 使用 System.out.println 同时打印多个字符串或数字
int a = 10;
int b = 20;
System.out.println("a = " + a + ",b = " + b)

(六) 变量的作用域

即变量的生效范围,一般是变量所在的代码块(大括号)。

(七)常量

常量是指程序运行过程中不能够被改变的量。

1.字面常量

10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L // long 字面值常量. 也可以写作 10l (小写的L)
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f // float 字面值常量, 也可以写作 1.0F
true // boolen 字面值常量, 同样的还有 false
'a' // char 字面值常量, 单引号中只能有一个字符
"abc" // String 字面值常量, 双引号中可以有多个字符

2. final 关键字修饰的常量

final int a = 10;
a = 20; // 编译出错. 提示 无法为最终变量a分配值 -》常量在运行过程中不能够被改变

(八) 类型转换

java作为一个强类型编程语言,当不同类型的变量之间相互赋值时,会有较严格的校验。
先看以下几个代码场景:

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

long表示的范围更大,可以将int的值赋给long类型的变量,但不能将long类型的值赋给int的变量。
double表示的范围更大,可以将int的值赋给ldouble类型的变量,但不能将ldouble类型的值赋给int的变量。
结论: 不同类型的变量之间相互赋值时,表示范围小的类型能隐性转换成范围较大的类型,反之则不行。

  1. int和boolean相互赋值
int a = 10;
boolean b = true;
b = a;  //编译错误,提示不兼容的类型
a = b;  //编译出错,提示不兼容的类型

结论 : int和boolean是毫不相干的两种类型,不能相互赋值

  1. int字面常量赋值给byte类型变量
byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失

注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.
结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理

使用强制类型转换

int a = 0;
double b = 10.5;
a = (int)b; //a = 10

int a = 10;
boolean b = false;
b = (boolean)a;  //编译出错,提示不兼容的类型

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

类型转换小结

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
  3. 将一个字面值常量赋值给一个变量时,java会自动对变量的存储范围进行检查。

二、运算符

(一) 算术运算符

  1. 基本四则运算符:+ - * /
  2. 复合赋值运算符:+= -= *= /=
  3. 自增、自减运算符: ++ - -
% 求模操作

不同于c语言的是,在java中,%不仅可以对int类型的值求模,也可以对double类型的值求模 ,也可以对负数求模

System.out.println(10%3); //1
System.out.println(-10%3); //-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//1
System.out.println(11.5%2); //1.5

(二) 关系运算符

主要有六个:== != < > <= >=

System.out.println(a <= b);
System.out.println(a >= b);

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

(三) 逻辑运算符

主要有三个:&& || !
注意: 逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean 类型。

(四) 位运算符

主要有四个:& | ^ ~

(五) 移位运算符

主要有三个:<< >>(有符号右移) >>>(无符号右移)
左移 <<: 最左侧位不要了, 最右侧补 0
右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位不要了, 最左侧补 0

注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义

(六) 条件运算符

只有一个:
三目运算符:表达式1 ? 表达式2 : 表达式3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊桂分呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值