JAVA里面有8中基本数据类型,分别是
整数型:
byte:长度为8位。最前面一位表示正负号,后面7位表示这个整数的绝对值,所以byte的取值范围时-128 ~ 127 (-2^7 ~2^7-1)
short:长度为16位。和byte类型一样,首位表示正负号。取值范围变成了-2^15 ~ 2^15-1(-32768~32767)
int:长度为32位。首位表示正负号,所以取值范围是-2^31 ~ 2^31-1(-2147483648 ~ 2147483647).一般整数型变量默认是int类型
long:长度为64位。首位表示正负号,所以取值范围是-2^63 ~ 2^63-1(-9223372036854775808 ~ 9223372036854775807)可以看到即使将二进制转换为十进制,这也是一个极大的数字,所以一般32位的int型就够我们使用了
浮点型:
float:单精度32位的浮点数,可以用于表示整数或者小数。
double:双精度64位的浮点数,可以用于表示整数或者小数。浮点型的数默认是double类型。
请注意,由于有精度限制,浮点型是不能用于精确计算的,尤其是涉及到金额计算,绝对不能用浮点型计算
布尔型:
boolean: boolean只有两个取值,ture和false,通常用于判断某个条件是否满足
字符型:
char:char类型是一个单一的16位Unicode字符,取值范围是\u0000 到\uffff,可以储存任何字符,如字母'A'、'z',符号'%'
以上是JAVA的8种基本数据类型,那么在java中怎么定义一个变量呢?首先我们要确定我们想要的类型,然后给这个变量取号名字(也就是标识符,前面我们说过标识符就是类的名字、方法的名字和变量的名字),比如我们想定义一个int型的变量x,
int x = 123456;
short s = 321;
byte b = 10;
long y = 76153L;
float f = 217.6f;
double d = 333.33;
boolean flag = true;
char letter = 'A';
前面我们已经知道怎么输出内容,那现在我们又定义了一些变量,我们现在尝试输出这些变量
public class MyFirstJavaClass{
public static void main(String[] args){
int x = 123456;
System.out.println(x);
short s = 321;
System.out.println(s);
byte b = 10;
System.out.println(b);
long y = 76153L;
System.out.println(y);
float f = 217.6f;
System.out.println(f);
double d = 333.33;
System.out.println(d);
boolean flag = true;
System.out.println(flag);
char letter = 'A';
System.out.println(letter);
}
}

可能有的朋友已经注意到,我们在定义long类型的变量y时后面加上了大写的L,定义float类型变量f时后面加上了小写的f ,为什么这么写,因为我们已经说过,整数型的数字默认是int类型,浮点型的数字默认是double类型,如果我们需要明确定义一个long类型的或者一个short类型的数字,需要在数值后面加上大写的L(小写的也可以,但是小写的l与数字1容易混淆,建议大写)或者大写的F(小写的也可以,这个我们已经通过例子验证过)。所以,217.6f,这表示一个单精度的float类型数字217.6,而217.6,它默认是一个双精度的double类型,我们也可以写成217.6d,尝试一下以下代码
public class MyFirstJavaClass{
public static void main(String[] args){
float f = 217.6f;
System.out.println(f);
double d = 217.6d;
System.out.println(d);
double d1 = 217.6;
System.out.println(d1);
}
}
可以看到,217.6d的效果和217.6是一样的,即217.6默认是等价于217.6d的,所以我们不能定义float f = 217.6;因为这样等效于float f = 217.6d,float是单精度的32位浮点数,它的精度没有double高。我们尝试定义float f = 271.6; 然后编译代码,会发现编译时错误
那么反过来我们可不可以用float类型的数值来赋给double类型的变量呢?double d = 217.6f; 这样可以吗?当然是可以的,因为双精度类型数值精度高。那我们执行一下看看会是什么结果。
public class MyFirstJavaClass{
public static void main(String[] args){
double d = 217.6f;
System.out.println(d);
}
}
编译正常,然而执行却得到了一个奇怪的数字,小数点后面多了很多位,这个数失真了!
再来看整数类型。不同于浮点型的数值后面要加f或者d表示这个数值的精度范围,整数类型只有长整型(long类型)需要加L表示,比如我们不需要123b,123s,123i,如果你定义byte b = 12b; short s = 12s; int i = 12i;那虚拟机会果断的丢给你一个错误。只有long l = 12L;虚拟机才会欣然接受。那我们可以不写L吗?long l = 12;这样可以吗?当然是可以的,long是64位的,很显然可以把一个32位以内的数包含进来。但是int i = 12L;就行不通了,哪怕12是一个很小的数,但是后面的L代表它势力强大,是一个64位的长整型数,不是一个32位的int能吃的下的。
public class MyFirstJavaClass{
public static void main(String[] args){
int i = 12L;
System.out.println(i);
}
}
看完了long这个大哥,再来看看超范围的问题,我们知道byte的取值范围是-128到127,如果超过这个范围会如何,比如byte b = 2046;
public class MyFirstJavaClass{
public static void main(String[] args){
byte b = 2046;
System.out.println(b);
}
}
结果是显然的,超过范围的定义也是会报错的。
整型和浮点型的数据类型已经讨论过,布尔型的比较简单,一般用于条件判断。例如我们假设全国平均工资水平是20000,我们现在的工资是12000,那我们有没有拖国家的后腿呢?
public class MyFirstJavaClass{
public static void main(String[] args){
double pre_salary = 20000.00; //平均工资2万
double my_salary = 12000.00; //我的工资1万2
System.out.println(my_salary<=pre_salary);
}
}
结果是令人伤心的,因为我们的工资低于平均工资是true,是事实,我们对不起国家。好吧,虽然伤心,但是也可以看到,我们并没有直接定义一个布尔型的数,但是我们输出的内容是一个表达式,它的结果是一个布尔型的值,最终这个值会被输出到控制台。
最后剩下字符型的基本数据类型。我们上面说了char类型是一个单一的16位UNICODE字符,取值是从\u0000到\uffff,那我们怎么定义它呢?
public class MyFirstJavaClass{
public static void main(String[] args){
char letter1 = '\u0041';
System.out.println(letter1);
char letter2 = 'A';
System.out.println(letter2);
}
}
从上面的例子可以看到,我们输出的两个字符结果是一样的,这是因为大写字母'A'的Unicode编码就是\u0041,所以,如果你知道每个字母,汉字,符号的Unicode编码,那你就可以直接用unicode的方式来定义它。另外,我们说过char类型是单一字符,就是说它只能表达一个字母,或者一个汉字,或者一个符号。尝试一下输出汉字和字符
public class MyFirstJavaClass{
public static void main(String[] args){
char letter1 = '你';
System.out.println(letter1);
char letter2 = '%';
System.out.println(letter2);
}
}
能不能定义一个词组呢?比如"你好"
public class MyFirstJavaClass{
public static void main(String[] args){
char letter1 = '你好';
System.out.println(letter1);
}
}
显然系统又残酷的拒绝了我们,不能,那要定义超过一个字符的一系列字符如何操作?我们可以使用String。
字符串:
String:用来标示一个由一系列字符组成的一串字符。定义字符串的方式和基本数据类型是一样的:
String str = "你好";
String str1 = "Hello World!";
我们在我们的第一个例子中已经知道怎么输出Hello World!了,现在我们知道了我们输出的其实是一个字符串,程序可以这样写
public class MyFirstJavaClass{
public static void main(String[] args){
String str = "Helo World!";
System.out.println(str);
}
}
现在我们已经知道怎么定义整型、浮点型、布尔型、字符型和字符串了,请注意,定义字符型的变量时,我们要使用半角的单引号将字符包起来(即英文输出法状态下的单引号''),定义字符串变量时,我们要使用半角的双引号将字符串包起来(即英文输入法状态下的双引号"")