一、数据类型装换
1、自动转换
/*
当类型不一样时,将会发生数据类型转换
自动类型转换(隐式):
1.特点:代码不需要特殊处理,自动完成
2.规则:数据范围从小到大
*/
public class Demo01DataType{
public static void main(String[] args){
System.out.println(1024);//这就是一个整数,默认就是int类型
System.out.println(1024);//浮点型,默认double
//左边long类型,右边int类型
//一个等号代表赋值,将右侧的int常量,交给左侧的龙变量进行存储
//发生自动类型转换
long num1=100;
System.out.println(num1);
double num2 = 2.5F;
System.out.println(num2);
//float=long,左右不同
//long--》float,范围不同
float num3=30L;
}
}
2、强制转换
/*
1.特点:代码需要进行特殊的格式处理,不能自动完成
2.格式:范围小类型 变量名=(范围小类型)范围大的数据类型
3.注意事项:
1》强制类型转换一般不推荐使用,可能发生精度损失,数据溢出。
2》byte/short/char这三种类型可以发生数学运算
3》byte/short/char这三种类型在运算时,先提升为int类型,然后计算
4》boolean不能发生数据类型转换
*/
public class Demo02DataType{
public static void main(String[] args){
//左边是int类型,右边是long类型,不一样
//long--》int
//NO自动转换
int num = (int)100L;
System.out.println(num);
int num2=(int)6000000000L;
System.out.println(num2);//1705032704 数据溢出
//dounble-->int
int num3=(int)3.5;
System.out.println(num3);//3,所有的小数位都被舍弃
char zifu1='A';//
System.out.println(zifu1);//66,字母A被当做65处理
//计算机的底层会用一个数字(二进制)来代表字符A
//一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成一个数字
byte num4=40;
byte num5=50;
//byte+byte-->int+int-->int
int result1=num4+num5;
System.out.println(result1);//90
short num6=60;
//int强制转换成short,必须保证不超过short范围
int result2=(short)(num4+num6);
}
}
3.算术运算符
注意事项:一旦有不同类型的数据,结果将会是数据类型范围大的
4.加法的多种用法
/*
1>对于数组来说,就是加法
2》对于char类型来说,在计算机之前,char会被提升为int,在计算,char类型字符
和int类型字符
3》对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串链接操作,任何
数据类型和字符串进行链接时,结果都会变成字符串
*/
public class Demo05Plus{
public static void main(String[] args){
//
String str1="Hello";
System.out.println(str1);
System.out.println(str1+20+30);
System.out.println(str1+(20+30));
}
}
4.自增自减
/*
自增:++
自减:--
基本含义:让一个变量涨、降1
使用格式:写在变量名前、后
使用方式:
1.单独使用:不和其他任何操作混合
2.混合使用:混合
使用区别:1、单独使用时++在前或者后没有区别
2.混合使用时:
A。如果前++,那么变量立即+1,然后拿着结果使用
B.后++,先使用变量本身的量,在让变量加1
注意事项:只有变量才能使用自增,自减,常量不能
*/
public class Demo06Operator{
public static void main(String[] args){
int num1=10;
System.out.println(num1);//10
++num1;
System.out.println(num1);
num1++;
System.out.println(num1);
System.out.println("================");
int num2=20;
System.out.println(++num2);
System.out.println(num2);
System.out.println("================");
int num3=30;
System.out.println(num3++);//30
System.out.println(num3);//31
System.out.println("================");
int num4=40;
//和赋值操作混合
int result1=--num4;
System.out.println(result1);
System.out.println(num4);
System.out.println("================");
int num5=50;
int result2=num5--;
System.out.println(result2);
System.out.println(num5);
System.out.println("================");
int x=10;
int y=20;
int result3=++x+y--;
System.out.println(result3);
System.out.println(x);
System.out.println(y);
//30++;错误,常量不能自增,自减
}
}
5、赋值运算符
/*
=
复合赋值运算符:
+= a+=1 相当于 a=a+3
-= b-=4 b=b-4
*=
/=
%=
注意:1常量不能进行赋值
2、复合赋值运算符其中隐含了一个强制类型转换
*/
public class Demo07Operator{
public static void main(String [] args){
int a=10;
a+=5;//a=a+5;
System.out.println(a);
int x=10;
x%=3;
System.out.println(x);
byte num=30;
num+=5;
System.out.println(num);
}
}
6、比较运算符
1》、结果是boolean值
2》、多次判断,不可连写。
7、逻辑运算符
/*
与(并且)&& 全是true,才true
或(或者)|| 只要有一个是true,就true
非(取反)!
与&&,或||,具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边的代码将不在执行,从而节省性能
注意:
1.只能用boolean值
2.可多个一起用
*/
public class Demo09Logic{
public static void main(String[] args){
System.out.println(true&&false);//false
System.out.println(3<4&&10>5);
System.out.println("=========");
System.out.println(true||false);
System.out.println(true||true);
System.out.println(false&&false);
System.out.println("=========");
System.out.println(!true);
System.out.println(!false);
int a =10;
System.out.println(3>4&&++a<100);
System.out.println(a);
int b =20;
System.out.println(3<4||++b<100);
System.out.println(b);
}
}
8、三元运算符
/*
一元 只需要一个数据就可以进行操作的运算符
二元 需要二个数据就可以进行操作的运算符
三元 需要三个数据就可以进行操作的运算符
格式:数据类型 变量名称=条件判断?表达式A:表达式B
流程:
首先判断条件是否成立:
如果成立为true,将表达式A的值赋给左侧变量
如果不成立为false,将表达式B赋给左侧变量
二选一
注意:
1、必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
2、三元运算符的结果必须被使用
*/
public class Demo10Operator{
public static void main(String[] args){
int a=10;
int b=20;
int max=a>b?a:b;//最大值的变量
System.out.println("最大值"+max);
}
}
9、入门方法
1》方法的 定义
/*
格式:
public static void 方法名称(){
方法体
}
方法名称的命名规则和变量一样,使用小驼峰。
方法体:也就是大括号当中可以包含任意条语句。
注意:
1、方法定义的先后顺序无所谓
2、方法的定义不能产生嵌套包含关系
3、方法定义好后,不会执行,如果要执行,一定要调用。
调用:
格式:
方法名称();
*/
public class Demo11Method{
public static void main(String[] args){
farmer();
}
public static void farmer(){
System.out.println("播种");
System.out.println("播种");
System.out.println("播种");
}
}
10、JDK9的JShe的简单使用
11、编译器的两点优化
/*
对于byte/short/char来说,如果右侧赋值的数值没有超过范围,
那么javac编译器将会自动隐含地为我们不上一个隐含的括号
1如果没有超过左侧范围,编译器补上强转
2如果右侧超过了左侧范围,报错
public class Demo12Notice(String[] args){
public static void main(String[] args){
short num1 =10;
System.out.println(num1);
short result=5+8;
}}