一,数据类型与变量
1.1数据类型
java中的数据类型分为两类:基本数据类型和引用数据类型
数据类型 | 关键字 | 占用内存 | 范围 | 与C语言的区别 |
字节型 | byte | 1字节 | -2^7 ~ 2^7-1 | C语言无此类型 |
短整型 | short | 2字节 | -2^15 ~ 2^15-1 | 相同 |
整形 | int | 4字节 | -2^31 ~ 2^31-1 | 相同 |
长整型 | long | 8字节 | -2^63 ~ 2^63-1 | 相同(注:JAVA无long long类型) |
单精度浮点数 | float | 4字节 | 不用记 | 相同 |
双精度浮点数 | double | 8字节 | 不用记 | 相同 |
字符型 | char | 2字节 | 0 ~ 2^16-1 | C语言的char是1个字节 |
布尔类型 | boolean | 未规定 | true / false | C语言无此类型 |
java中的数据类型与C语言的稍有差异,请注意区分:
1.JAVA中没有C语言的无符号类型,全部是有符号类型
2.JAVA中的布尔类型只能赋值为true/false,在C语言中所说的非零为真,零为假的逻辑在JAVA中均不能使用,下面举一个例子加深一下理解,例如:
//在C语言中下述代码是可以运行的
#include<stdio.h>
int main()
{
if(1<2<3)
printf("haha\n");
return 0;
}
//因为在C语言中先计算1<2,为真就是1,为假就是0,再把得到的数与3进行比较
//而在JAVA中下述代码是不能运行的
public class Main{
public static void main(){
if(1<2<3){
System.out.println("haha");
}
}
}
//因为在JAVA中先计算1<2,为真就是true,为假就是false,再把true/false与3进行比较
//而两者的类型不同,不能相互比较所以会报错
1.2变量
JAVA中变量的使用与C语言几乎没有差别,唯一要注意的就是有的类型的数值范围与C语言不同,注意区分,在此演示一下:
public class Main {
public static void main(String[] args) {
int a = 10;
float b = 1.0f;
//注意这里的f不能丢,否则会报错且不能运行
//因为编译器默认 1.0 为double类型,而b是float类型
double c = 2.0;
char d = 'c';
boolean e = false;
}
}
如果没有学过C语言,可以看我之前写的博客:初始C语言
1.3类型转换
JAVA作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验
上面所说的 f 也是因为这个,再举一个例子,例如:
public static void main(String[] args) {
long a = 10;
int b = 20;
b = a;
//报错,long的范围比int范围大,将long类型的数据赋值
//给int类型的变量可能会发生数据丢失,不安全
b = (int)a;//正确
a = b;//正确
}
}
在此有同学会问,照你这么说,那a是long类型,b是int类型,为什么b给a赋值就不会报错呢?因为在这里会发生自动类型转换(隐式即编译器实现,我们无法看到),编译器可以自动将数据范围小的转为数据范围大的。
因此我们在不同类型的变量相互赋值的时候,最好使用强制类型转换。
注意:1.在JAVA中,对字面值的直接赋值是允许的,前提是没有超过表示范围
2.不能将布尔类型的变量转换成其他类型,也不能将其他类型的变量转换成布尔类型。
2.String类型
JAVA中使用String类定义字符串,与C语言不同,先简单学习一下用法。
public class Main {
public static void main(String[] args) {
String s1 = "abcd";
String s2 = "efg";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s1);
//JAVA中可以用+来拼接字符串
}
}
字符串可以与整形数字相互转换
public class Main {
public static void main(String[] args) {
//整形转字符串
int a1 = 321;
//方法1
String s1 = a1+"";
System.out.println(s1);
//方法2
String s2 = String.valueOf(a1);
System.out.println(s2);
//字符串转整形
String s = "123";
int a = Integer.parseInt(s);
System.out.println(s);
}
}
二,运算符
JAVA中的运算符与C语言中的几乎一样,只有两点需要注意:
1. 左移运算符,在JAVA中,左移运算符有两个,分别是>>和>>>
有符号>>:最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号>>>: 最右侧位不要了, 最左侧补 0
2. 从所周知 && 和 || 存在短路求值的规则(即若&&的左侧为假,那么整体为假,右侧的表达式就不会进行运算,若 || 的左侧为真,那么整体为真,右侧的表达式就不会进行运算),而在JAVA中存在(条件表达式)&(条件表达式)和(条件表达式)|(条件表达式),此时的 & 和 | 不是位操作符,而是逻辑操作符,与&&和||相同,但是不会短路,即使&左侧为假,右侧的表达式也要进行运算,| 也是一样。