本篇文章我们分为三个部分进行展开.
一:字面常量
我们学习一门语言,第一个接触的字面常量就是"Hello World!".
常量: 在程序运行期间,固定不变的量称为常量.
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('a');
System.Out.println(true);
System.Out.println(false);
其中的hello world!,100,3.14,a,true,false都是字面常量.
常量可以分为6大类:
1.字符串常量:由" "括起来的,比如"hello world!"等.
2.整形常量:直接写上的数字,比如:100等.
3.浮点数常量:直接写上的小数,如:3.14等.
4.字符常量:由’ '括起来的单个字符,如’a’等.
5.布尔常量:只有true和false两种
6.空常量:null
二:数据类型
先来了解一下什么是数据类型?
数据类型是固定大小内存的别名.
~~ 在定义变量时,需要根据变量将来保存数值的不同选择合适的类型来定义;在Java中数据类型主要分为基本数据类型和引用数据类型两大类.
基本数据类型有四类八种:
四类: 整型,浮点型,字符型以及布尔型
八种: 字节型,短整型,整型,长整型,单精度浮点型,双精度浮点型,字符型,布尔型.
如下图所示:
注意:
1.不论是在16位系统还是32位系统,int都占有4个字节;不论是在32位系统还是64位系统long都占8个字节
2.整型和浮点型都是带有符号的
3.整型默认为int型,浮点型默认为double型
4.字符串属于引用类型.
补充:字节是计算机中表示空间的基本单位,计算机使用二进制表示数据,我们认为8个bit为一个字节(byte).
其中:1KB=1024Byte,1M=1024KB,1G=1024M,1T=1024G.
三:变量
3.1 概念
在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等,对于这些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的。
3.2 语法格式
数据类型 变量名=初始值;
int a=10;
double b=3.14;
3.3 整型变量
3.3.1 整型变量的定义
//在定义时给出初值,在任何的系统下都占有4个字节.
int a=10;
//定义前没有给初始值,使用前必须设置初始值.
//范围:-2147483648 ~ 2147483647 (-2^31 --> 2^31-1)
int b;
b=10
3.3.2 长整型变量的定义
//为了区分int和long类型,一般在long类型变量的初始值之后加L或l
//long在任何的系统下都占有8个字节.
//L更好区分一点.
//long的表示范围为:-2^63 - 2^63-1
long a= 10;
long b=10L;
long c=10L;
3.3.3 短整型变量的定义
//short表示的范围为:-32768~32767,-2^15 - 2^15-1
//在任何的系统下都占有2个字节.
//short一般使用的比较少
short a=10;
3.3.4 字节型变量:
//byte在任何的系统下都占1个字节
//byte的范围是:-128~127,-2^7 ~ 2^7-1
byte a=10;
3.3.5 单精度浮点型
//float 在任何系统下都占用4个字节,一般在数字后加上f或者F.
//float 的范围是:-2^31 - 2^31-1
float num=1.0f;
3.3.6 双精度浮点型
//double在任何的系统下都占有8个字节.
//double的范围是:-2^63 - 2^63-1
double a=1.0;
double b=2.0;
System.out.println(a/b);//输出0.5
double num=1.1;
System.out.println(num*num);//输出结果为:1.2100000000000002
3.3.7 字符型变量
//char占用2个字节,表示的范围是:-32768~32767,-2^15 - 2^15-1
//Java中使用 单引号+单个字母 的形式表示字符字面值
char c1= 'A';
char c2= '1';
//Java的字符型可以存放整型.
char c3= '牛';
3.3.8 布尔值变量:
/* 1. Java的虚拟机规范中,并没有明确规定boolean占几个字节,
也没有专门用来处理boolean的字节码指令,
在Oracle公司的虚拟机实现中,boolean占用1个字节.
2.boolean 类型的变量只有两种取值, true 表示真, false 表示假
3.Java 的 boolean 类型和 int 不能相互转换~~~
不存在 1 表示 true, 0 表示 false 这样的用法.*/
boolean a=true;
boolean b=false;
四. 数据类型转换与类型提升
4.1 数据类型转换
简单来说,就是把一种数据类型的变量转换成另外一种数据类型。转换过程中需要遵守一定的规则,不能够随意的转换.
基本思想: 只有同类之间可任意转换,低级转换到高级可自动转换,但高级转低级需要进行强制转换。
Java中的类型转换又分为两大类:自动类型转换(隐式类型转换,即小类型–>大类型)和强制类型转换(显式类型转换,即大类型–>小类型).
4.1.1 自动类型转换(隐式类型转换)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
byte b=10;
int c=100;
c=b
System.out.println(c);
/*b是小类型,c大类型的,进行隐式类型转换,
将小类型的byte自动转换为大类型的int进行赋值*/
//例子:
float f=13.14f;
double d=99.99;
d=f;
System.out.println(d);
4.1.2 强制类型转换(显式类型转换)
当进行操作时,代码需要经过一定的格式处理,不能自动完成。
byte b=10;
int c=100;
b=c;
/*
此时代码会报错,因为b是byte型,是小类型的,而c是int型,相对与b来说是大类型的,
当b=c时,相当于将大类型赋值给小类型,会出现数据的丢失,所以程序会报错.
这个时候就需要强制类型转换.将b=c改为 b=(byte)c,程序就可以正常运行了;
*/
b=(byte)c;
System.out.println(b);
//例子:
float f=13.14f;
double d=99.99;
f=float(d);
System.out.println(f);
4.2 类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
//例一:
byte b1=10;
byte b2=20;
int ret1=b1+b2;
System.out.println(ret1); //30
byte ret2=b1+b2;//此行会报错:从int到byte会有数据的丢失
/*
原因:在做加法运算时,b1,b2被提升为int类型了
byte+byte===>int+int---->int
解决方法:进行强制类型转换,把int型强转为byte型
即:byte ret2=(byte)(b1+b2);
*/
byte ret2=(byte)(b1+b2);
System.out.println(ret2);
//例二:
byte ret3=10+20;//此行不会出错,编译通过.
System.out.println(ret3);
/*
不会报错的原因:
10+20===>int+int--->int.
编译器在编译时,会直接计算10+20的结果
相当于 byte ret3=30;
30没有超过byte的取值范围,因此可以通过.
但是在例一当中,b1,b2是变量,加完之后结果是否会超过byte的取值范围就不知道了.
*/
字符串的转换:
String s1="hello";
String s2="1234";
System.out.println(s1);
System.out.println(s2);
String s3=" world!!!";
s1=s1+s3;
System.out.println(s1);//输出:hello world!!!
int a=1234;
//需求:将a转换为字符串类型
String s4=""+a; //""为空字符串
System.out.println(s4); //输出1234
String s5=String.valueof(a);
System.out.println(s5); //输出1234
//需求:将数字类型字符串转换为整型数字
int b=Inteage.parseInt(s2);
System.out.println(b); //输出1234