变量
定义
表示数据在内存的内存地址,变量对应的数据是可以改变的;
变量的使用
- 声明变量(申请内存地址)
数据类型 变量名; int a; - 初始化(赋值)
变量名 = 值; a = 10; - 变量的使用
System.out.println(a);
public class Demo01{
public static void main(String[] args){
/*
//方式1:
//1、申明变量
int a;
//2、变量赋值
a = 10;
//3、使用变量
System.out.println(a);
*/
/*
//方式2:
//1、申明变量申明变量和变量初始化
int a = 10;
//2、使用变量
System.out.println("a的值为:"+a);
*/
//方式3:
//连续定义多个变量 int a; int b; int c = 10;
int a,b,c = 10;
// System.out.println("a的值为:"+a); 错误代码
System.out.println("c的值为:"+c);
//注意:在java中变量一定要初始化才能使用
}
}
变量的命名规范
- 只能是数字、字母、下划线、美元$符号组成
- 不能使用数字开头
- 不能使用java中的关键字和保留字
- 使用驼峰命名法(两个单词以上组成变量)
- 见名知意
- java中区分大小写
基本数据类型
数据类型细节
- float类型最后需要加F或者f
- long类型最后需要加L
- 任何一个整数都默认当做int类型来处理
- 任何一个小数都默认当做double类型来处理
转义字符
- 换行 \n
- 制表符 \t
- 双引号 "
- 反斜杠 \
数据类型的转换
自动转换
- 在数据类型兼容的情况下, 小转大就是自动类型转换
- 自动转换也称为隐式转换,不需要做任何操作
示例:
byte a = 1;
//将byte类型转换为int类型
int b = a;
强制转换
-在数据类型兼容的情况下,大转小就是强制转换
语法:(转换类型)变量
double a = 10.2;
//将double类型强制转换成int类型,可能会导致精度的丢失
int b = (int)a;
注意事项
- boolean类型不参与任何数据的类型转换
- 基本数据类的大小为:byte short\char int long float double
- 强制类型转换可能会导致精度的丢失
- 表达式中最大是double,则结果是double
- 表达式中最大是float,结果float
- 表达式中最大是long,结果long
- 表达式中最大是int,结果int
- 表达式中有char、byte、short,结果为int
运算符
算数运算符
- +(加) 在字符串中是拼接的意思,还是加法运算符
- -(减)
- *(乘)
- /(除)
- %(取模)
- ++(自增,自身+1),当自增运算符参与运算时,++在前,则自身+1,再进行赋值,++在后,则是先进行赋值,再进行自身+1;
- –(自减,自身-1),当自减运算符参与运算时,–在前,则自身-1,再进行赋值,–在后,则是先进行赋值,再进行自身-1;
赋值运算符
- 赋值运算符= += -= *= /= %=
int a = 10;
int b = 20;
a+=b; //等同于a = a+b;
System.out.println(a);
a-=b; //等同于a = a-b;
System.out.println(a);
a*=b; //等同于a = a*b;
System.out.println(a);
a/=b; //等同于a = a/b;
System.out.println(a);
a%=b; //等同于a = a%b;
System.out.println(a);
关系运算符
- 关系运算符 > < >= <= != == 结果为boolean类型
int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a>=b);
System.out.println(a<=b);
System.out.println(a!=b);
System.out.println(a==b);
逻辑运算符
- && (与) || (或) ! (非,取反)
- 面试题:
短路&& 、||和&、|区别:
短路&&:只要有一个表达式为false时,则后边的表达式就不会再执行
短路||:只要有一个表达式为true时,则后边的表达式就不会再执行
&:无论结果如何都会执行完整个表达式
|:无论结果如何都会执行完整个表达式
//&& 与 当运算符两边的表达式都为真时,结果才为真
int a=10;
int b=20;
System.out.println(a<b&&a!=b); //true
System.out.println(a>b&&a!=b); //false
System.out.println(a!=b&&a>=b); //false
System.out.println(a>=b&&a==b); //false
//|| 或 当运算符两边有一个为真,结果就为真
System.out.println(a<b||a!=b); //true
System.out.println(a>b||a!=b); //true
System.out.println(a!=b||a>=b); //true
System.out.println(a>=b&&a==b); //false
// ! 对结果取反
System.out.println(!true); //false
三目运算符
- boolean类型表达式 ? 结果1 : 结果2;
int age=3;
String str = age>18?"成年人":"未成年人";
System.out.println(str);
- 三目运算符的嵌套使用
String str1 = age>18?age<40?"青年人":"老年人":"未成年人";
System.out.println(str1);
位运算符
只针对二进制进行操作
按位与& 相同位置上,同为1则为1
按位或| 相同位置上,同为0则为0
按位异或^ 相同位置上,相同则为0,不同为1
按位取反~ 0->1,1->0
左移 << 将二进制数位整体向左移动N位,低位补0
右移 >> 将二进制数位整体向右移动N位。如果是正数补0,负数补1
无符号右移(必须是32位) >>> 将二进制数位整体向右移动N位。高位补0
//5按位与9
//5 00000101
//9 00001001
//结果 00000001
System.out.println(5&9);//1
//5按位或9
//5 00000101
//9 00001001
//结果 00001101
System.out.println(5|9);//13
//5按位异或9
//5 00000101
//9 00001001
//结果 00001100
System.out.println(5^9);//12
//10按位取反 00001010
// 11110101 最高位是1,为负数,这个是补码
//反码 11110100
//原码 10001011
System.out.println(~10);//-11
//10 左移2位 00001010
// 00101000
System.out.println(10<<2);//40
//10 右移2位 00001010
// 00000010
System.out.println(10>>2);//2
//-10 原码:10001010
// 反码: 11110101
// 补码: 11110110
//右移2位 11111101
System.out.println(-10>>2);//-3
//15 0000 0000 0000 0000 0000 0000 0000 1111
//无符号右移2
// 0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(15>>>2); //3
//-15 1000 0000 0000 0000 0000 0000 0000 1111
//无符号右移2
//反码 1111 1111 1111 1111 1111 1111 1111 0000
//补码 1111 1111 1111 1111 1111 1111 1111 0001
//无符号右移2 0011 1111 1111 1111 1111 1111 1111 1100
System.out.println(-15>>>2); //1073741820