数据类型转换
-
除了boolean其他都是数值型,相互之间可以转换
-
自动类型转换
-
自动完成,我们感觉没有变化,不会出现任何问题,小转大(小或者大指范围)
-
自动类型转换特殊情况会丢失精度,int转float,long转float,long转double(取值虽然在目标范围之内,但是超过目标范围的精确度)
public static void main(String[]args) { long age = 18888888888888888L; float a; a=age; System.out.println(age); System.out.println(a); System.out.println(1.0-0.1-0.1-0.1-0.1-0.1);//0.50000000001 }
-
-
强制类型转换(数据造型)
-
大转小的直接转,异常不兼容的类型
-
语法:在需要转的值或变量前用小括号里面写需要转的类型;
-
范围溢出(超过最大值部分,从最小开始往上加)
long age = 188888888888888888L; int a; a=(int)age; System.out.println(age); System.out.println(a);-1809464343 System.out.println(1.0-0.1-0.1-0.1-0.1-0.1); }
-
String
-
值引号包围
-
转义符。特殊符号需要转义
-
\n: 换行
-
\t: tab键
-
\\
-
一个tab四个空格,tab实际是Excel中的一个单元格
public static void main(String[]args) { //String name = "名字:ABC\t性别:a\t年龄:25"; //System.out.println(name); System.out.println("\t我是一个三好学生按时上课"); System.out.println("我\t是一个三好学生按时上课"); System.out.println("我是\t一个三好学生按时上课"); System.out.println("我是一\t个三好学生按时上课"); System.out.println("我是一个\\t三好学生按时上课"); System.out.println("我是一个三\t好学生按时上课"); System.out.println("我是一个三好\t学生按时上课"); }
标识符命名
- 标识符:就是你起名字的地方
- 可以选的字符:A ~ Z a ~ z 0 ~ 9 _ $
- 标识符首字符不能是数字大小写字母,$ _
- 其他字符可以是64个中任意
- 类名必须大写开头
- 变量名小写
- 常量所有字符都大写
- 在不影响代码的情况下,尽可能的通俗易懂,做到见名知意
- 驼峰命名法:每个单词首字母大写,其他小写
- 大驼峰:每个单词首字母大写,其他小写,AvgAge,TitleName
- 小驼峰:首单词的首字母小写avgAge
- 匈牙利命名法
- 每个单词按照命名习惯写,中间用下划线个开
- avg_age、Title_name;
- 驼峰命名法:每个单词首字母大写,其他小写
- java中的关键字和保留字不能用来命名
- 关键字:jdk已经定义了的,class,void,public,数据类型,final
- 保留字:以后有可能成为关键字,但现在还不是关键字的单词,true,false,goto
进制转换
-
十进制:0 ~ 9 int a = 129;
-
二进制:0 ~ 1 int b = 0b/0B10;
-
八进制:0 ~ 7 int c = 017;
-
十六进制:0 ~ F int d = 0x5F;
-
转换
- 十进制转其他进制:
- 除以进制数取余,从下往上读
- 其他进制转十进制:
- 每一位乘以进制数位数次方相加;
- 0b0101011100;0*20+0 * 21
- 十进制转其他进制:
-
小数:跟整数部分相反
-
float:4 39 int 4 10 long 8 double
-
1 2 3 指数
-
0000 0000 0000 0000 0000 0000 0000 0000int
-
00000000 0000000000000
-
01 你好 125 -10
-
第一位表示符号位,1为负数,0正数
public static void main(String[]args) {
//16进制
int age = 0xff;//15*160+15*161=15+240=255
//二进制
int a = 0b111;//-7 10000000000111
//八进制
double score = 00.5;
System.out.println(age);
}
运算符
-
表达式:数据+运算符 1+2=3 int a = 3;
-
算术运算符
-
表达式会自动提升数据类型
-
+:
- 等同数学上的加法运算,就是类似3+5
- 字符串拼接String s1 = “abc”;String s2 = “bcd”;s1+s2:abcbcd
- 任何数据类型,与字符串拼接,得到的都是字符串
- 表达式中只要有字符串,计算到该字符串后,整个结果都变成拼接
-
-:等同于数学上的减号,就是减法运算
-
*:等同于数学上的乘法运算,写法不同,X
-
/:等同于数学的除法,写法不同3/2=1
-
%:取余,取模,3%2=1,余数的符号与被除数的符号一直,与除数符号无关
public static void main(String[]args) { //System.out.println(1/0);//除数不能为0 System.out.println(1/0.0);//无限,无穷 //System.out.println(0/0); System.out.println(0.0/0.0);//NaN System.out.println(0/0.0);//NaN System.out.println(-1/0.0);//-Infinity System.out.println(1/-0.0);//-Infinity System.out.println(-1/-0.0);//Infinity //-6/-3=2;==》2*-3=-6 System.out.println(3%2);//1 System.out.println(3%-2);//1 System.out.println(-3%2);//-1 System.out.println(-3%-2);//-1 //-3/-2=-1...1===》1*-2-1=-3; }
-
-
赋值运算符
- =
- +=:
- -=:
- *=:
- /=:
- %=:不会出现类型转换问题,都是自动完成计算,自动完成类型转换
-
双目运算符
- ++:自增运算+1 int a =3;a+±->a+=1–>a=a+1;
- –:自减运算-1
//int a = 15;//等号赋值 byte b = 10; //b+=10; //b=b+10; //a+=10;//a=a+10; System.out.println(b); System.out.println("====================="); int a = 5; System.out.println(a+=1);//6 a=a+1;//6+1 System.out.println(a);//7 //a++;//++在后,如果是只有自己,就是数值自增1,如果还有其他运算,先运算再自增1 System.out.println(++a);//8++在前,先自增,再进行其他运算 System.out.println("========================="); int c = 10; int e; e=++c; System.out.println(e);//11 System.out.println(c);//11 System.out.println("========================="); int x = 5;//6 7 6 7 int y = 2;//3 2 //6+6+3+6+2=23 //int z = ++x + x+ ++y + x++ + --y;//z 11 19 23 20 //5+7-6+3-2-7=0 //int z = x++ + ++x - --x + ++y - --y - ++x;//0 int z = x-- + --x - --y + x-- - --y + ++x - x++;//10 System.out.println(z); }
-
关系运算符(判断两个变量的大小关系)
-
>:大于
-
<:小于
-
<=:小于等于
-
>=:大于等于(以上稚只能用于数值变量的运算)
-
==:等于,可以做数值型或非数值型运算
-
!=:不等于(==和!=可以用于任意类型的变量的计算)
public static void main(String[]args) { int a = 5; int b = 3; double c = 3.14; float d = 2.8f; long e = 2555555555L; String str = "abd"; String Str1 = "abd"; String Str2 = "bcd"; Scanner input1 = new Scanner(System.in); System.out.println("输入abd"); Scanner input2 = new Scanner(System.in); //String str3 = input.next(); System.out.println(input1==input2);// }
-
-
逻辑运算符(逻辑关系运算,操作的都是boolean类型数据)
-
&:与并且 ,必须两个条件同时成立才会成立,true&true->true;true&false->false;只要有一个表达式结果为false,则最终结果为false;
-
|:或,只要有一个表达式为true,则最终结果为true。
-
!:非表达式为true,结果就是false,表达式为false,结果就是true
-
&&:短路与判断跟&一样,有一个表达式为false,则结果为false,如果第一个表达式已经是false,则不会判断第二个表达式
-
||:短路或,同&&第一个为true,直接返回结果
public static void main(String[]args) { int a = 5; int b = 3; double c = 3.14; float d = 2.8f; long e = 2555555555L; String str = "abd"; String Str1 = "abd"; String Str2 = "bcd"; Scanner input1 = new Scanner(System.in); System.out.println("输入abd"); Scanner input2 = new Scanner(System.in); //String str3 = input.next(); boolean flag = false; System.out.println(a<b&&(++b>c));//false System.out.println(b);//3 }
-
回数判断
System.out.println("请输入一个5位数的数字:");
int h = input.nextInt();
//个位数
int z = h %10;
//十位数
int x = h /10 %10;
//百位数
int n = h /100 %10;
//千位数
int v = h /1000 %10;
//万位数
int m = h /10000%10;
if (z == m && x == v){
System.out.println("你输入的是回数");
}else System.out.println("你输入的有误!");
运算符
-
位运算符:(二进制运算01)写一个效率最高的幂方法运算
- &:与:4&3=0 密码 :遇0则0
- |:或4|3:有一说一
- ~:非:取反,取反后得到的是负数,实际就是一个补码,要通过补码得到源码
- ^:异或:密码学中用的最多。相同为0,不同为1,一个数,异或另一个两次,还是自己。
- 2568 ^ 5 346676 ^ 5 2586
- >>:右移,多少位,就是除以2 的多少次方
- <<:左移,乘以2的多少次方
- >>>:无符号右移:将负数的符号位当做正常位数处理。
- 补码:1111 1011 负数4==》1000 0101源码==》反码==>补码
- 正数:源码、反码、补码一样
- 负数在计算机中是以补码的形式存在的。因为计算机为了设计简单
- 如计算机要有加法能,有加法运算的算法存在,必须有减法
- 3-2 ==》3+(-2)
- -4==》1000 0100
- 0111 1011:反码
- 0111 1100:补码(取反+1)
public static void main(String[]args) { int a = 4; int b = 3; System.out.println(a&b); System.out.println(a|b); System.out.println(~4); System.out.println(a^b); //有ab两个变量,在不借助第三个变量的情况下,交换值 a=a^b; b=a^b;//a^b^b==a a=a^b;//a^b^a==b System.out.println("a的值是"+a); System.out.println("b的值是"+b); System.out.println(-4>>2);//1 System.out.println(3<<2);//0000 0011==>0000 1100 12 System.out.println(-4>>>2);//移动不管是不是符号位 }
-
三目运算符、三元运算符、条件运算符
-
语法:boolean表达式?值1:值2
-
当前面的boolean结果是true,则返回值1,否则返回值2
public static void main(String[]args) { Scanner input = new Scanner(System.in); int a = 15; int b = input.nextInt(); int c = input.nextInt(); System.out.println((a>b?a:b)>c?(a>b?a:b):c); //只要有以下情况:首先想到用那个三目 //如果条件成立,则怎么,否则怎么样 //或者,如果条件成立,则返回什么,否则返回另外一个 double salary = input.nextDouble(); System.out.println(salary>5000?"买个车山下班":"挤地铁"); }
-
注意:三目一定会有一个返回值,这个返回值一定要使用,否则报错;
-
不同:
-
&&和&:
-
&&短路与,运算符两边是boolean表达式,只有两边都是true结果才是true,而当第一个表达式结果为false,第二个不会运行表达式1&&表达式2,效率稍微高一点
-
&,结果同上作为逻辑与,不管第一个表达式结果如果,都会进行第二个的计算,其次可以作为位运算符,位运算时两边操作的是整数
-
看两边的操作数,如果是Boolean类型,就是逻辑或,如果是整数位运算
-
num1=num1^num2异或同一个数两次,得到的还是自己。