一、基本数据类型
定义变量实际上就是申请内存来存储值,也就是说当创建变量时,需要在内存中申请空间。内存管理系统根据变量的类型来为变量分配空间。分配的存储空间只能存储该类型数据。
java的两大数据类型:内置数据类型。引用数据类型。
二、内置数据类型(八种)
六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔型
整数型:byte(8位有符号二进制补码表示的整数)、short(16位有符号二进制补码表示的整数)、int(32位有符号二进制补码表示的整数)、long(64位有符号二进制补码表示的整数)、float(32位单精度,默认值0.0f)、double(64位双精度,默认值0.0d)、char(64位unicode字符,可以存储任何字符)、boolean(默认值false)
string默认值是null,不属于内置数据类型。String的存储方式:英文占用一个字符,中文占用两个字符
三、引用类型
对象、数组都是引用数据类型,所有引用类型的默认值都是null,一个引用变量可以用来引用任何与之兼容的类型
四、java常量
在Java中使用final关键字来修饰常量
五、自动类型转换
整型、实型(常量)、字符型数据可以混合运算,运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。
byte->short->char->int->long->float->double(由低到高)
注意:
不能对boolean类型进行类型转化、
把容量大的类型转化为容量小的类型必须使用强制类型转换、
转换过程中可能导致溢出或损失精度、
浮点数到整数的强制类型转换是通过舍弃小数得到,而不是四舍五入
六、java运算符
算术运算符(+ - * / % ++ --)
前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算
关系运算符(== != > < >= <=)
位运算符(作用在所有的位上,并且按位运算。先把数字转化成二进制形式)
如何实现无符号数的右移操作
java提供了两种右移运算符。>>(有符号右移运算符)和>>>(无符号右移运算符)。两者区别:>>在执行右移操作时,若参与运算的数字为正数,则在高位补0,若为负数,则在高位补1.而>>>无论参与运算的数字为正数或负数,执行运算时都会在高位补0。
注意:在对char、byte、short等类型的数进行移位操作前,编译器都会自动将数值转换为int类型,然后才进行移位操作。由于int型变量只占32bit,因此当右移的位数超过32bit时移位运算没有意义。为了保证移动位数的有效性,采用取余的操作。即a>>n等价于a>>(n%32)
short j=-4;
system.out.print(Integer.toBinaryString(j))//11111111111111111111111111111100
j>>>1;
system.out.print(Integer.toBianryString(j))//11111111111111111111111111111110
特别说明:对于short类型来说,short只占16bit。在移位操作时会先转化成int类型,虽然在进行无符号右移时会在高位补1,但当把运算结果再赋值给short类型的变量时,只会取低位的两个字节,因此,高位补0还是1对运算结果无影响。
<<与>>有什么异同?
不同:左移运算没有有符号与无符号左移,左移时,移除高位的同时在低位补0
相同:左移运算时,如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取余。例如对int型移动33位,实际上只移动了(33%32)=1位
逻辑运算符(用于布尔类型)
短路逻辑运算符(&&)
当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
public class LuoJi{
public static void main(String[] args){
int a = 5;//定义一个变量;
boolean b = (a<4)&&(a++<10);
System.out.println("使用短路逻辑运算符的结果为"+b);
System.out.println("a的结果为"+a);
}
}
因为a<4的结果为false,所以不会执行a++,所以a的值不变为5
赋值运算符
C + = A 与 C = C + A 是有区别的一句话总结: += 运算符既可以实现运算,又不会更改 s 的数据类型;而后者,C 和 A 必须是同一类型,否则无法直接运算。
条件运算符(三元运算符)
单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
a?b:c?d:e的计算顺序是先算c?d:e后算 a?b:(c?d:e)
instance of运算符
A instanceof B 如果A这个对象属于B这个类或者接口,则结果返回true,否则返回false
运算符优先级
七、java增强for循环
package com.cuiinsist.myfirst.mapper;
public class Main{
public static void main(String[] args){
int[] nums={1,2,3,4};
for (int i:nums){
System.out.print(i);
System.out.print(",");
}
String[] names={"lili","lala","mimi","jj"};
for(String name:names){
System.out.print(name);
System.out.print(".");
}
}
}
格式是for(声明语句:表达式){}
声明语句:声明新的局部变量,该变量的类型必须和表达式中的数组员元素的类型相匹配。其作用域限定在循环语句块中,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法
break跳出循环。如果是双层for循环,且break在最内层for循环中,则break只能跳出最内层,最外层还会执行
八、switch case
https://www.runoob.com/java/java-switch-case.html
九、Math类
java的Math包含了用于执行基本数学运算的属性和方法,Math的方法都被定义为static形式,通过Math类就可以在主函数中直接调用
常用方法:
xxxValue()
将Number对象转化为xxx数据类型的值并返回(包括byteValue() shoreValue() intValue() longValue() floatValue() doubleValue())
a.compareTo(b)
用于比较两个相同的数据类型,两个不同类型的数据不能用此方法比较。如果a>b,返回1,如果a=b,返回0,如果a<b,返回-1
a.equals(b)
如果a与b的类型相同且数值相同,则返回true,否则返回false
valueOf
Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。
Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。
Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。radix是进制
Integer.toString()
返回一个以字符串表示的Number对象值
Integer.parseInt("9",16)
Double.parseDouble("15")
将字符串参数作为有符号的十进制整数进行解析。第一个参数是数字形式的字符串,第二个参数是进制
Math.abs(-8)
返回绝对值
Math类中round、floor、ceil方法
Math.round():四舍五入,返回值类型是int
Math.floor(a):向下取整,取小于a的最大整数,返回值类型是double
Math.ceil(a):向上取整,取大于a的最小整数,返回值类型是double
十、包装类
在实际开发中,经常会遇到需要使用对象,而不是内置数据类型的情况。java提供了对应八种内置数据类型的包装类
package com.cuiinsist.myfirst.mapper;
import java.util.ArrayList;
import java.util.List;
public class Charac {
public static void main(String[] args) {
//包装类的用法,<>里必须是包装类,不能是基本数据类型
List<Character> list=new ArrayList();
Character aa=new Character('a'); //装箱
Character bb=new Character('a');
char cc='a';
char dd='a';
huhu(aa);
if(aa==bb){//比较的是地址,输出结果是2.也就是他们的地址不同 aa.equals(bb)比较的是存储的值
System.out.println("1");
}else{
System.out.println("2");
}
if(cc==dd){//比较的是存储的值。输出结果是3
System.out.println("3");
}else{
System.out.println("4");
}
}
public static void huhu(char c){//拆箱,将character类型的拆成char
char d=c;
System.out.println(c);
}
}