[JAVA]初始JAVA——数据类型与变量及运算符
1.字面常量
常量及在程序运行期间,固定不便的量
字面常量的分类:
1.字符常量:由单引号括起来的单个字符(必须是英文的单引号),比如’1’,‘B’;
2.字符串常量:由双引号括起来的(必须是英文的双引号),比如"welcome",“你好”;
3.整型常量:在程序中直接写出的数字(不带小数点),比如1,24;
4.浮点数常量:程序中直接写出的小数,比如 3.14,0.7;
5.布尔常量:只有两种值true和false;
6.空类型常量:null;
public class Demo {
public static void main(String[] args){
System.out.println("hello world!");
System.out.println("100");
System.out.println("3.14");
System.out.println("true");
System.out.println("false");
}
运行结果:
2.数据类型
JAVA中数据类型分为两类:基本数据类型和引用数据类型
基本数据类型分为四类八种:
1.整形:字节型byte(1字节)、短整型short(2字节)、整型int(4字节)、长整型long(8字节)
2.浮点型:单精度浮点型float(4字节)、双精度浮点型(8字节)
3.字符型char(2字节)
4.布尔型boolean(没有明确规定占多少内存)-值为true和false
注意
- 无论是在16为的系统还是32为的系统中,int都占用4字节,long都占用8字节
- 整形和浮点型都是有符号的
- 整型默认情况下是int型,浮点型默认情况下是double
在这里有的小伙伴可能会问道什么是字节?
在计算机中使用二进制来表示数据,其中8个二进制位为1个比特位,而字节是计算机中表示空间大 小的基本单位,其中1KB=10224Byte,1MB=1024KB,1GB=1024MB
3.变量
在JAVA中除了始终不变的常量外,还有内容可能会经常改变的量——变量,比如:人的年龄、身高、体重等他都不是固定不便的量。我们上文所谈到的数据类型就是用来定义不同类型的变量的。
定义变量的语法格式为:
数据类型 变量名=初始值;
//比如
int a = 12;
double b = 3.14;
char c = 'A';
boolean d= true;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
d = false;//d的值可以改变
System.out.println("d="+d);
//以int型为例简单举例一下变量的几种定义方式:
//方式一:在定义时给出初始值
int a1 = 10;
System.out.println("a1="+a1);
//方式二:先定义,再赋值
int a2;
a2 = 12;
System.out.println("a2="+a2);
//方式三:定义时没有赋值,在使用之后在进行赋值(编译报错)
//int a3;
//System.out.println("a3="+a3);
//a3 = 13;
运行结果:
注意:
- JAVA局部变量在使用时一定要初始化!!
- 在赋值时一定不能超过它的值范围!!
3.1 整型变量
3.1.1 字节型变量
byte b = 11;
System.out.println(b);
//byte型所能表示的值的范围:(-128 - 127)
//Byte为字节型的包装类型
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
注意:
- byte型所能表示的值的范围:(-128 - 127)
- Byte为字节型的包装类型
3.1.2 短整型变量
short s = 20;
System.out.println(s);
//short型所能表示的值的范围:(-32768 - 32767)
//Short为字节型的包装类型
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
注意:
- short型所能表示的值的范围:(-32768 - 32767)
- Short为字节型的包装类型
3.1.3 整型变量
int a = 24;
System.out.println(a);
//int型所能表示的值的范围:
//Integer为字节型的包装类型
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
注意:
- int型所能表示的值的范围:(-2^31 ~2^31-1)
- Integer为字节型的包装类型
3.1.4 长整型变量
int a = 10;
long b=10L;//一般为了区分int和long类型,long类型变量初始值之后加L或者l
long c=10l;//但是由于有时1和l会很难区分所以推荐使用L
//long型所能表示的值的范围:
//Long为字节型的包装类型
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
注意:
- long型所能表示的值的范围:(-2^63 ~ 2^63-1)
- Long为字节型的包装类型
3.2 浮点型变量
3.2.1 双精度浮点型变量
double d = 3.14;
System.out.println(d);
猜猜下面这段代码的值:
int a = 10;
int b = 4;
System.out.println(a/b);//输出2.5吗
运行结果:
在Java中,int除以int任然是int型,得到结果会舍弃小数部分,保留数部分
double d = 10.0;
double e = 4.0;
System.out.println(d/e);//结果为:2.5
//输出的是浮点数最细小的非负整数
System.out.println(Double.MIN_VALUE);
注意:
- 浮点数与整数在内存中的存储方式不同,不能单纯使用2^n表示;
- Double为double的包装类型
3.2.1 单精度浮点型变量
float f = 2.0f;
float f1 = 3.0F;
System.out.println(f);
System.out.println(f1);
单精度浮点数一般会在浮点数后加f或者F,用于与双精度浮点数区分。
由于float表示的数据精度范围较小,一般在工程上遇到浮点数优先考虑double型。
float的包装类型为Float。
3.2 字符型变量
char c1 = 'A';
char c2 = '1';
char c3 = '哈';
System.out.println(c1);
System.out.println(c2);
char c3 = '你';//java中字符型可以存放汉字
System.out.println(c3);
计算机中的字符本质上是一个整数。c语言中使用ASCII码表示字符,而JAVA使用Unicode表示字符,一个字符占两个字节,因此Unicode表示的字符种类更多。
- char类型的包装类型为Character
3.2 布尔型变量
布尔型常用来表示真和假,它有true 和 false 两个值,值得注意的是JAVA中的布尔类型不能和int类型互换,更不能用1 表示 true,0 表示 false 。
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
注意:
- JAVA虚拟机规范中,并没有明确规定boolean占几个字节;
- boolean的包装类型为Boolean
4.类型转换
在JAVA中,但参与运算的数据类型不一致时,就会进行类型转换。JAVA中类型转换主要分为两种:自动类型转换(隐式)和强制类型转换(显式)
4.1 自动类型转换(隐式)
自动类型转换是指两种数据类型在转换过程中不需要显示地进行声明,由编译器自动完成。自动类型转换需要满足下面两个条件:
- 两种数据类型彼此兼容;
- 目标类型的取值范围大于源类型的取值范围
int a = 100;
int b = 100L;
b = a;//a,b都是整形,a的范围小,b的范围大,当a赋值给b时,编译器会自动将a提升为long类型
a = b;//编译报错,long的范围比int大,会有数据丢失
float f = 3.14F;
double d = 7.8;
d = f;//编译器会自动将f转换为double类型,然后赋值
f = d;//double的范围比float大,会有数据丢失,不安全
byte b =257;//257超过了byte的数据范围,会有数据丢失
4.1 强制类型转换(显式)
在操作时需要经过一定的处理,不能自动完成。数据范围大的可以转换为是数据范围小的。在隐式类型转换中我们将数据范围大的赋值给数据类型小的编译器会报错,但是在显示类型转换中经过一定的处理我们就可以实现,但是在开发过程中我们得规避这种情况,尽量使用符合要求得数据类型;
int a = 100;
int b = 100L;
b = a;
a = (int)b;
float f = 3.14F;
double d = 7.8;
d = f;
f = (float)d;
a = (int)d;
byte b = (int)257;
boolean flag = true;
a = flag;//编译失败,数据类型不兼容
flag = a;//编译失败,数据类型不兼容
注意:强制类型转换不一定成功,不相干的数据类型不能相互转换
5.类型提升
不同的数据类型之间相互运算时,数据范围小的会被提升到数据范围大的。
- ** int 与 long 之间:** int会被提升为long
- ** byte与byte的运算:** byte所能表示的数据范围为-128 ~127 所以在使用时一定要注意。由于计算机的CPU通常按照4字节为单位从内存中读写数据。为了硬件上使用方便,像byte和short这种低于4字节的数据类型,会先提升为int型在进行运算。
6.字符串类型
在JAVA中用String定义字符串类型,比如:
String s1 = "hello";
String s2 = "world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);//拼串
int型转换为String型
int num = 10;
//方法一
String str1 = num + "";
//方法二
String str2 = String.valueOf(num);
String型转换为int型
String str = "100";
int num = Integer.parseInt(str);
//int num = Integer.valueOf(str);