目录
一、数据类型
在java中,数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型主要分为四类八种:
1.四类:整型,浮点型,字符型,布尔型。
2.八种:
引用数据类型主要包括类、接口、数组。
比如我们熟知的类有string类(字符串类型)。
二、变量
变量介绍
区别于一般常量和字面常量,对于经常需要改变的内容,在java程序中成为变量,而数据类型就是用来定义不同类型的变量的。
语法格式: 数据类型 变量名=初始值;
eg:int a=10; double b=3.5; char c='F'; boolean d=true;
在java程序中,整型数字会默认为int型,小数会默认为double型,因此,特别的,当我们单独定义long型和float型变量时:long a=100;会报错或者报警告,应该写为long a=100l;或long a=100L;
同样的float b=3.0;也应该改为float b=3.0f;(或float b=3.0F;)。
另外常见的错误还包括:使用前为赋值,赋值超过类型表示范围。
eg:int a;
System.Out.println(a);
int d=326646262666;
System.Out.println(d);
布尔类型:
布尔类型作为一种特殊的数据类型,可取值仅仅为true和false两种。不同于C语言,布尔类型的变量因为不存在0为false,非0为true的说法,其类型也不能与int等其他类型之间相互做类型转换。
类型转换:
在java中,当参与运算数据类型不一致时,就会进行类型转换,java中的类型转换主要分为两类:自动类型转换和(隐式)和强制类型转换(显式)。
自动类型转换(隐式):代码不需要任何处理,在代码编译时,编译器会自动进行处理(范围小的类型会自动转换为范围较大的类型)。
int a=100;
long b=10L;
b=a;//long的范围比int范围大,编译时会自动将int型的a变量提升为long型后赋值给b;
a=b;//编译会报错,因为将long型的b赋值给范围较小的int型的a时可能会丢失数据,不安全。
float a=10.6f;
double b=3.4;
b=a;//编辑器会自动将float型的a变量提升为double型后赋值给b;
a=b;//编译时会报错,因为double型的b赋值给范围较小的float型的a时,可能会丢失数据,不安全;
强制类型转换(显式):当进行操作时,代码需要进行一定的格式处理,不能自动完成(范围大的类型转换为范围较小的类型)。
int a=100;
long b=10L;
b=a;//同上,为自动类型转换(隐式)
a=(int)b;//范围由大(long型)到小(int型)为强制类型转换(显式),这样编译不会报错
float a=10.6f;
double b=3.4;
b=a;//同上,为自动类型转换(隐式);
a=(float)b;//范围由大(double型)到小(float型),为强制类型转换(显式),否则会报错;
类型提升:
不同类型的数据之间进行运算时,数据类型小的会被提升为数据类型大的。
int a=10;
long b=20L;
int c=a+b;//int+long==>long+long赋值给int型的C变量时,会因为丢失数据而报错。
long d=a+b//编译成功
byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);//编译错误:不兼容的类型,从int转换为byte可能有损失;
虽然a和b都是byte,但编译器在编译a+b操作时,会先将a和b都提升为int型,再进行计算,得到的结果也为int,因此会有损失(字节低于4个字节的类型:short和byte都会先提升为int,再参与运算)。
正确的写法:
byte a=10;
byte b=20;
byte c=(byte)(a+b);
System.out.println(c);
补充:java中数据类型大小排序:byte<short<char<int<long<float<double
字符串类型:
public class TestDemo {
public static void main(String[] args) {
String s1="hello";
String s2="world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);
}
}
输出结果为:hello
world
helloworld
int转为string:
public class TestDemo {
public static void main(String[] args) {
int n=10;
String s1=n+"";//方法一
String s2=String.valueOf(n);//方法二
System.out.println(s1);
System.out.println(s2);
}
}
string转为int:
public class TestDemo {
public static void main(String[] args) {
String s1="100";
int num=Integer.parseInt(s1);
System.out.println(num);
}
}
三、运算符
java中运算符分为:算术运算符(+ - * /),关系运算符,逻辑运算符,位运算符,移位运算符以及条件运算符等。
算术运算符:
1.int/int时如果算出小数,要向下取整
2.做除法和取模运算时,右操作符不能为0,否则会报错
3.不同于c语言,java中不仅可以对int型进行取模运算,还可以对double型进行取模运算
System.out.println(11.5%2.0);// 1.5
但没有意义,一般还是对int型进行取模运算
4.数据类型不一致时进行运算,会向类型大的提升
关系运算符:
关系运算符(== < > != <= >=)的计算结果都是true或者false,区别于C语言的1和0
逻辑运算符:
短路求值:
System.out.println(10/0==0);//因为0为右操作符,所以编译会报错
System.out.println(20>10||10/0==0);//true
System.out.println(20<10&&10/0==0);//flase
对于||运算符,只要左侧表达式为真,整体输出就为真,不会运行右侧表达式
对于&&运算符,只要左侧表达式为假,整体输出就为假,不会运行右侧表达式
因此,即使右侧表达式编译会报错,也能正常运行整个代码。
位运算符:
单目运算符: ~(按位取反)(二进制每位取反 0变1, 1变0)
双目运算符: &(按位与) (二进制对应位进行与运算)
| (按位或) (二进制对应位进行或运算)
^(按位异或)(二进制对应位 相同为0相异为1)
移位运算:
1.左移 <<:左侧不要,右侧补0,因此运算后可能由正数变负数
2. 右移 >>:右侧不要,最左侧符号位正数补0,负数补1
3.无符号右移 >>>: 右侧不要,最左侧补0
条件运算符:
表达式1?表达式2:表达式3
如果表达式1为真,整体输出结果为表达式2的结果;如果表达式1为假,整体输出结果为表达式3的结果。
int a=10;
int b=20;
System.out.println(a>b?a:b);//输出结果为20