Java数据类型
整数
long
long类型后必须加L(注意Long不是long)
long num = 10L;
long是基本的数据类型;Long是封装引用
小数(浮点数)
float
float类型后面一定要加f(大小写都行)
float num = 1.1f;
最好完全避免使用浮点数进行比较大小,因为会四舍五入变成一个约等于的数,用来比较大小不精确。
Long
long = num = 1.1L//数字后面尽量用大写L,小写的看起来像数字一
字符
char
表示一个字符,不能表示字符串(即多个字符)
char name = 'a';
字符串
String
是一个类,不是关键字
String name = "Mike";//"S"为大写
布尔值
boolean
表示是非,只有true和false两个值
boolean flag = true;
boolean flag1 = false;
数据类型转换
强制转换 (类型)变量名
int i = 128;
byte b = (byte)i;//byte 是 -128~127 数据太大了会溢出
System.out.println(i);//128
System.out.println(b);//-128
自动转换 低–高
byte,short,char->int->long->float-double
int i = 128;
double b = i;
注意点:
-
不能对布尔值进行转换
-
不能把对象类型转换为不相干的类型
-
在把高容量转换到低容量的时候,使用强制转换(比如double转换到int要使用强制转换)
-
转换的时候可能存在内存溢出,或者精度问题!
System.out.println((int)23.7);//23 System.out.println((int)-45.9);//-45
数据溢出
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;//10亿,int类型最多存放21亿多
int year = 20;
int total = money*year;//-1474836480,计算的时候溢出了
long total2 = money*year;//默认是int,转换之前已经存在问题了,结果和上面一样
long total3 = money*((long)year);//先把一个数转换为Long
System.out.println(total3);//输出正确
变量
类变量
实例变量
局部变量
public class Demo08 {
//类变量 static;从属于类,和类一起出现和消失
static double salary = 2500;
//属性:变量
//实例变量:从属于对象;如果不自行初始化,这个类型为默认值
//布尔值:默认是false
//除了基本类型,其余的默认值都是null
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量:必须声明和初始化值,只在该方法内有用
int i = 10;
System.out.println(i);
//变量类型 变量名 值为"new Demo08()"
Demo08 demo08 = new Demo08();//new Demo()后加上".var"可以快速打出来;alt+回车键也能打出来
System.out.println(demo08.age);//0
System.out.println(demo08.name);//null
//类变量
System.out.println(salary);
}
//其他方法
public void add()
{
//System.out.println(i);
}
}
常量
public class Demo09 {
//常量final,常量名一般使用大写字母表示
//final是修饰符,不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量的命名规范
基本运算符 优先级使用()
二元运算符
package operator;//这句话不能删
public class Demo01 {
public static void main(String[] args) {
//二元运算符
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);//30
System.out.println(a-b);//-10
System.out.println(a*b);//200
System.out.println(a/b);//0,有小数int类型会四舍五入所以变成0
System.out.println(a/(double)b);//0.5
}
}
运算符和类型转换
public class Demo02 {
public static void main(String[] args) {
long a = 10000000000000L;
int b = 123;
short c = 10;
byte d = 8;
//不同类型混合运算无论是赋值还是运算都是向高位转
System.out.println(a+b+c+d);//为Long类型
System.out.println(b+c+d);//Int
System.out.println(c+d);//Int
}
}
比较运算符
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:true或false 布尔值
int a = 10;
int b = 20;
int c = 21;
//取余 模预算
System.out.println(c%a);// c/a->21/10=2...1
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
自增自减
//++ 自增 -- 自减 一元运算符
int a = 3;
//执行这行代码后,先给b赋值,再自增
int b = a++;
System.out.println(b);//3
System.out.println(a);//4
//执行这行代码前,先自增,再给c赋值
int c = ++a;
System.out.println(a);//5
System.out.println(c);//5
//幂运算 3^2->3*3=9;使用Math数学工具类
double pow = Math.pow(3,2);//3*3=9
System.out.println(pow);//9
逻辑运算
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
//逻辑与运算:两个变量都为真,结果才为真
//此时(b&&a)中的b为假,则后面a的判断代码就不在执行
System.out.println("a&&b:" + (b&&a));//false
//逻辑或运算:两个变量都为假,结果才为假
System.out.println("a||b:" + (a||b));//true
//取反:如果是真,结果为假;如果是假,结果为真
System.out.println("!(a&&b):" + !(a&&b));//true
//短路运算:检测上面逻辑与运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5,所以后面的(c++<4)没有运算
位运算(面试题,要了解)
例:
A = 0011 1100
B = 0000 1101
//与运算:两个都为1时才为1,否则为0
A&B = 0000 1100
//或运算:两个都为0时才为0,否则为1
A|B = 0011 1101
//异或:两个相同为0,不相同为1
A^B = 0011 0001
//取反:0变为1,1变为0
~B = 1111 0010
面试可能会问的:
2乘8怎么写代码效率最高?
一般人会写2*8 = 16 即计算机会2*2*2*2
计算机是二进制的
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0001 0000 16
这里使用"<<"(左移运算符,乘法)和">>"(右移运算符,除法)
2<<3 即向左移三位(看二进制),即2乘上3个2=2*8=16
左移和右移运算符效率极高!!!
最终代码编写结果如下:
System.out.println(2<<3);
扩展赋值运算符(面试)
int a = 10;
int b = 20;
a+=b;//a = a+b
a-=b;//a = a-b
面试:
//字符串连接符 + ,String;只要“+”任意一边又String类型,结果都为String类型
System.out.println(""+a+b);//1020;因为""在前面,所以直接全面判断为String类型
System.out.println(a+b+"");//30;因为前面两个是int类型,所以先相加
三元运算符(必须掌握)
//x?y:z
//如果x==true,则结果为y,否则结果为z
int score = 80;
String type = score < 60 ? "不及格":"及格";
System.out.println(type);//及格