Java学习DAY2
变量和数据类型运算符
1.什么是变量
public class test {
public static void main(String[] args ){
int a ;
a=10;
System.out.println(a);
}
}
- a就是一个变量
- 代码中创建一个变量等价于申请一块内存空间
- 变量必须先定义才能被使用
2.变量的形态
public class test {
static int a; //静态属性/类成员变量/类变量
int b; //属性/成员变量/实例变量
public static void main(String[] args ){
int a ; //局部变量
a=10;
System.out.println(a);
}
}
3.整型变量
- 基本语法格式
int 变量名=初始值 - Java中=表示赋值,意思是给变量设置一个初始值
- 最后不要忘记带;
- Java中,一个int变量占4个字节,和操作系统没有关系
什么是字节?
字节表示计算机中空间大小的基本单位,计算机使用二进制表示数据,我们认为8个二进制位(bit)为一个字节(byte) 四个字节表示的数据范围是-2^31 => 2^31-1,大概是-21亿到+21亿(2的 31 次方中31是这样算的 : 4*8=32-1=31 )
用以下代码看Java中整型数据范围:
System.out.println(Integer.MAX_VALUE);//int的最大值
System.out.println(Integer.MIN_VALUE);//int的最小值
结果
Interger就是Int的包装类
Long就是long的包装类
Short就是short的包装类
Double就是double的包装类
4.长整型变量
- 基本语法格式
long 变量名=初始值;
long num=10L;//定义一个长整型变量,初始值也可以写作10l(小写的L不是数字1)
System.out.println(num);
- Java中long类型占8个字节,数字表示范围是-2^63=> 2^63-1
- 用以下代码查看Java的长整型数据范围
System.out.println(Long.MAX_VALUE);//long的最大值
System.out.println(Long.MIN_VALUE);//long的最小值
结果
5.双精度浮点型变量
- 基本语法格式
double 变量名=初始值;
double num=1.0;
System.out.println(num);
- 神奇的代码1
int a =1;
int b =2;
System.out.println(a/b);
结果
大部分的编程语言中整数除以整数得到的还是整数,会把小数部分截断(直接舍弃).但有些语言就可以直接出现0.5,例如 Python3、JavaScript。dart…
Java中,int除以int得到的值还是int。若想得到0.5,需要用double类型计算。
double a=1;
double b=2;
System.out.println(a/b);
结果:
- 神奇的代码2
double num=1.1;
System.out.println(num*num);
结果
- 神奇代码3(1)
double a=1.1;
if(a*a==1.21){
System.out.println("相等");
}else{
System.out.println("不相等");
}
结果
- 神奇代码3(2)
JAVA表示的浮点数有误差,不能拿==来比较两个浮点数是否相等,正确做法应该要把比较的浮点数进行相减,比较这个差值是否一定小于一定的范围(误差允许的范围).算钱的时候一般都以分为单位,此时均为整数计算,避免了浮点数计算。
double a=1.1;
if(a*a-1.21<0.0000001&&a*a-1.21>-0.0000001){
System.out.println("相等");
}else{
System.out.println("不相等");
}
结果
6.单精度浮点型变量
- 基本格式
float 变量名=初始值;
float num=1.0f; //写作1.0F也可以
System.out.println(num);
结果
float在Java中占4个字节。同样遵循IEEE 754标准,由于表示的数据精度范围比较小,精度也比较低,一般在工程上用到的浮点数都优先考虑double,不太推荐float。
7.字符型变量
- 基本格式
char 变量名=初始值;
char ch='a';
在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,表示的字符种类更多包括中文。
8.字节类型变量
- 基本语法格式
byte 变量名=初始值;
byte value=0;
System.out.println(value);
结果
- 字节类型表示的也是整数,只占一个字节,表示范围比较小-128—127
- 这个类型非常常见,尤其是进行网络编程的时候。
9.短整型变量
- 基本语法格式
short 变量名=初始值; - short只占用两个字节的整数,表示的数据范围是-32768—+32767
- 这个表示的范围比较小,一般不推荐使用
10.布尔型变量
- 基本语法格式
boolean 变量名=初始值; - boolean类型的变量只有两种取值。true表示真,false表示假。
- Java的boolean类型和int不能相互转换,不存在1表示true,0表示false这种用法。
- Boolean类型有些JVM的实现是1个字节有些是占1个比特位,没有明确规定。
11字符串类型变量
注意:String类型不是基本数据类型,而是引用数据类型。
- 基本语法格式
String 变量名=“初始值”; - 代码示例:
String name="zhangsan";
System.out.println(name);
若字符中要带有双引号怎么输出呢?
直接加双引号就会出错:
String str="my neme is""zhangsan“";
System.out.println(str);
结果:
这里需要用到转义字符
String str="my neme is\"zhangsan\"";
System.out.println(str);
结果:
- 字符串长度
String str="hahaha";
System.out.println(str.length());
结果
- 字符串拼接
+操作,表示字符串接, 使用+能够把两个字符串给拼接起来。
代码示例:
String a="hello";
String b="world";
System.out.println(a+b);
结果
不仅可以两个整数用+,还可以字符串用+。而且还可以字符串和整数进行相加:
String a="hello";
int b=10;
System.out.println(a+b);
结果
hello10
Process finished with exit code 0
要是想要先算a+b。我们要加括号。
String a="hello";
System.out.println(a+(10+20));
结果
hello30
Process finished with exit code 0
其实还有下面这种写法。不过我们不太常用:
12.变量的作用域
作用域和变量形态密切相关。也就是该变量所能生效的范围,一般是变量定义所在的代码块(大括号)
13.变量的命名规则
**硬性指标**
- 一个变量名只能包含数字、字母、下划线、$。
- 数字不能开头。
- 变量名对大小写敏感。Num和num 是两个不同的变量.
- 变量名不能是JAVA的关键字
软性指标 - 见名知意
- 多个单词构成的变量名。使用驼峰命名法:
小驼峰(首个单词首字母小写,后续单词首字母大写)eg:studentName
大驼峰(所有单词首字母都大写)eg:StudentName
14.理解类型转换
注意:但凡代码中涉及到了强制类型转换。意味着代码的正确性,就需要程序猿人工来保证了
- int和long互相赋值
int a=10;
long b=20;
a=b;//编译出错,提示可能会损失精度
b=a;//编译通过
结果
Error:(37, 11) java: 可能损失精度
需要: int
找到: long
这时候可以进行强制类型转换
int a=10;
long b=20;
a=(int)b;
System.out.println(a);
结果
20
Process finished with exit code 0
long 表示的范围更大,可以将int赋值给long,但不能将long赋值给int。
- int和double类型相互赋值
注意:int和doublel类型不能相互转换
int a=10;
double b=1.0;
// a=b;//编译出错,提示可能会损失精度
b=a;//编译通过
double表示的范围更大,可以将int赋值给double,但是不能将double赋值给int。
- int和boolean赋值
int和boolean不能相互赋值。 - int和byte相互赋值
int a=100;
byte b=256;
System.out.println(a);
System.out.println(b);
报错:
byte表示的数据范围是-128到+127,256已经超过范围,而100还在范围之内。Java会自动进行一些检查校验,判断赋值是否合理。
15.逻辑运算符
注意:逻辑运算符的操作数和返回值都是boolean
- 逻辑与&&:一假则假
- 逻辑或||:一真则真
- 逻辑非!:也称为逻辑取反
逻辑与&&和逻辑或||都遵循短路求值,
System.out.println(10>20&&10/0==0);
System.out.println(10<20||10/0==0);
结果:
false
true
Process finished with exit code 0
因为&&前面的是假,所以后面的除0操作就没被运行,这就是短路求值操作。
16.位运算符
注意:当&和|的操作数是整数(int,short,long,byte)的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算
- 按位与&
- 按位或|
- 按位取反~
- 按位异或^
17.移位运算符
- 左移<<:最左侧不要了,最右侧补0.(左移一位相当于乘以2)
- 右移>>:最右侧不要了,最左侧补符号位(正数补0,负数补1)(右移一位相当于除以2)
- 无符号右移>>>:最右侧位不要了,最左侧补0