一。变量及数据类型
定义变量的语法: 数据类型 变量名 = 值; 例如int a = 20;
基本数据类型:
整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean
引用数据类型:String字符串型 等...
public class Demo1 {
public static void main(String[] args) {
/*String s = "abcdeft";//双引号
s = "java";*/
// int a = 100;
// byte b = 100;
/*自动转换(隐式转换)
//a = b;//把b的值赋给a 小范围的数据类型可以直接提升为大范围的数据类型
a = a+b; //小范围的数据类型和大范围的数据类型运算时,结果自动提升为大的数据类型
System.out.println(a);*/
//强制转换
// b = (byte)a; //大范围的数据类型必须通过强制转换才能转为小范围的数据类型
// byte c = (byte)(a+b);//注意byte范围
//System.out.println(c);
byte b1 = 30;
byte b2 = 10;
byte b3 = (byte)(b1+b2);//为了避免两个byte相加(运算),结果超出byte范围,所以把变量自动提升为int
byte b4 = 3 + 4;//常量的值只要在byte范围,直接赋值给byte
}
}
二。数据类型转换
2.1 隐式转换(自动转换)
int a = 100; byte b = 10; //1. 小的数据类型可直接提升为大的数据类型 // a = b; //2. 当小的数据类型和大的数据类型进行运算时,结果会提升为大的数据类型 a = a + b; System.out.println(a);
public class Demo2 {
public static void main(String[] args) {
//long长整型 8字节 64位 最大值 2的63-1
//float浮点型4字节 32位 最大值 2的127-1
//所以float的范围比long范围要大
// byte < short < int <long < float <double
float y = 999L;//自动转换 整数可以自动提升为浮点型 .0
System.out.println(y);
long x = (long)9.0F;//强制转换 浮点型必须转换才能转成整数
System.out.println(x);
}
}
2.2 显式转换(强制转换)
int a = 100; byte b = 10; //1. 大的数据类型需要强制转换才能转为小的数据类型 //注意:如果超出了被赋值的数据类型的取值范围,得到的结果会出现特殊情况 b = (byte)a; System.out.println(b); b = (byte)(a+b); System.out.println(b);
public class Demo3 {
public static void main(String[] args) {
//字符型char 和 整数型int的转换
//计算机把所有的符号能够表示成二进制数字,指定了一套规则(编码)
//ASCII 保存128个常用字符以及转换int值
//GBK编码 支持中文 简体 繁体
//GB2312 支持中文的简体
//UTF-8 开发建议 全世界通用的编码
System.out.println('a'+1);//字符参加运算会自动提升为int类型
System.out.println('a'*'a');//支持int类型所有的运算
System.out.println('我'+1);//0-65535 2个字节 2的15次方-1
char c = 120;
System.out.println(c);
int x = 'b';//char 与int 一家,自动转换
int y = 100;
char t1 = 100-3;
char t2 = (char)(y-3);
System.out.println(t2);
}
}
public class Demo4 {
public static void main(String[] args) {
//+ 数值相加 正号 连接字符串
//姓名 年龄 性别
/* String name = "凯";
int age = 20;
char sex = '男';
//连接成一条信息 输出 \n 换行
System.out.println("我叫"+name+"\n我今年"+age+"岁\t我是"+sex+"的");
String x = "13";
String y = "14";
System.out.println(x+y);
System.out.println("11"+1);
int a = 10;
int b = +20;
int c = a+b;*/
/* int a = 10;
int b = 3;
int c = a / b; //左右两边都是整数 ,结果一定是int
double d = a/b;//左右两边都是整数 ,结果一定是int 3.0
double e = 10.0/3; //精确到小数位3.3333333333333335
System.out.println(c);
System.out.println(d);
System.out.println(e);
int x = 12 % 5;
System.out.println(x);
// 偶数 % 2 = 0(余数)
//奇数 % 2 = 1 (余数)*/
//++自增(每次加1) --自减(每次减1)
//x++和 --x的区别
//1. 如果单独使用,没有任何区别
//2. ++写在前面,先自己+1,再去做其他运算
//3. ++写在后面,先去做其他运算, 再自己+1
/* int x = 18;
System.out.println(x--);
System.out.println(--x);*/
/* int b= 10;
b++;
b = b+1;*/
/* int a = 10;
a = a * 2; // 把变量的值*2
a *= 2; //相当a = a*2
int b = 20;
b /= 2;
System.out.println(b);*/
/*
int a = 100;
int weixin = 9;
int xianjing = 1000;
int zhifubao = 0;
boolean b = !(weixin>=a || xianjing>=a || zhifubao >=a);
System.out.println(b);*/
/* b++;
System.out.println(b!=a); //true真或者 false假
System.out.println(b>a);
System.out.println(b==a);
System.out.println(b--==a);
System.out.println(b=a);*/
int a =10;
int b = 20;
/* boolean c1 = (a>5)|(++b>20);
System.out.println(b);*/
boolean c2 = (a<5)&&(++b>20);
System.out.println(b);
System.out.println(c2);
System.out.println(c2);
面试题
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
解决 byte b3 = (byte)(b1 + b2);
说明:由于b1和b2是变量,变量存储的值是变化的,在编译的时候不会计算变量表达式里面具体的值,相加有可能会超出byte的取值,所以byte或short在参与运算的时候会自动提升为int。
byte b3 = 3+4;
常量优化机制:给一个变量赋值,如果等于号的右边是常量的表达式并且没有一个变量,那么就会在编译阶段计算该表达式的结果,如果一旦有变量参与表达式,那么就不会有编译期间的常量优化机制
2.3 整数型与浮点型
float y = 999L; System.out.println(y); long x = (long)9.0F; System.out.println(x); long x1 = (long)9.8F; System.out.println(x1); 取值范围 byte<short<int<long<float<double 虽然long的长度为8个字节float的长度为4个字节 但是他们底层的存储结构不同,所代表的数值大小范围也不同
2.4 整数型与字符型
int y = 'a'; System.out.println(y); char x = 97; System.out.println(x);
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码统一规定了上述常用符号用哪些二进制数来表示
GBK:仅限中文,含简体与繁体中文
GB2312:仅限中国大陆使用,只含简体中文
UTF-8:它是一种全世界国家通用的一种编码,开发建议你选择UTF-8编码
System.out.println('a'+1);//字符型在参与运算时会自动提升为int类型 System.out.println('a'+'a');//支持int类型的各种运算 char c1 = 'b'; char c2 = 'a'; int x = c2-c1; System.out.println(x);
char c = 100-3;//常量参数运算时,只要结果符合0-65535范围即可 System.out.println(c); int x = 100; char c1 = (char)(x - 3);//变量参与运算符需要强制转换 System.out.println(c1);
三。运算符
3.1 算术运算符
加+ 、减- 、乘* 、除/ 、模(余数)%
注意事项:
+号在java中有三种作用:代表算术运算符、正号、字符串的连接符
整数相除只能得到整数,如果想得到小数,必须把数据的类型变成浮点数类型
%:求余数。任何一个整数%2结果不是0就是1,可以用%判断一个数是否是奇偶数
自增自减运算符++ --
++ :自增,对原有的数据进行+1
- - :自减,对原有的数据进行-1
注意:当++或--在变量的前面和在变量的后面的区别!!
单独出现时,写前面与写后面无区别
在变量后面: 先赋值,后自增
在变量前面: 先自增,后赋值
面试题
int a = 20; int b = 20;
int c = 20;
a = b++;
c = --a;
b = ++a;
a = c--;
求变量a、b、c的值?
案例演示2:
int x = 4;
int y = (x++) + (++x) + (x*10);
求变量x、y的值?
哪句会报错,为什么?
byte b = 10;
b++; //不会报错底层做了b+1,b被提升为int类型+1的结果也是int类型,底层会自动强转为byte类型
b = b+1;//报错:因为b被提升为int类型+1的结果也是int类型,解决: b=(byte)(b+1)
3.2 赋值运算符
基本的赋值运算符:=
扩展的赋值运算符:+= ,-=,*=, /=, %=
a +=1;可以写成 a = a+1;也可以写出a++; a *=2;可以写成 a = a*2;
3.3 关系运算符
==,!=,>, >=, <, <=
无论你的操作是简单还是复杂,结果是boolean类型
int a = 10; int b = 10; b++; System.out.println(b!=a); System.out.println(b>a); System.out.println(b==a); System.out.println(b--==a); System.out.println(b=a);
3.4 逻辑运算符
&逻辑与 |逻辑或 !逻辑非
&&短路逻辑与 ||短路逻辑非
逻辑运算符&&和&的区别(掌握)
案例演示 &&和&的区别? 最终结果一样。 &&具有短路效果。左边是false,右边不执行。左边为true才执行右边 &是无论左边是false还是true,右边都会执行
在开发中常用:&&、||、!
3.5 三元运算符
三元(三目)运算符的格式 (关系表达式) ? 表达式1 : 表达式2;
案例1 获取两个数中的最大值
案例2 比较两个整数是否相同
案例3 获取三个整数中的最大值