Java 变量及基本数据类型

1.Java变量

1.1 变量的概念

  • 内存中开辟的一块存储空间,用于存放运算过程中需要用到的数据;
  • 该区域有自己的名称(变量名)和类型(数据类型);
  • 该区域的数据可以在同一类型范围内不断变化;

1) 为什么需要定义变量

  • 用来不断的存放同一类型的常量,并可以重复使用;

2) 定义变量的格式

  • 数据类型  变量名  = 初始化值; 

3)变量使用范围

  • 变量的作用范围(一对{}之间有效,"就近原则");

1.2 变量的使用

1)声明

int a ;  //表示声明一个整型变量,名为a;

int b,c,d;  //表示声明三个整型变量,名为b,c,d;

2)命名

  • 只能包含数字、字母、_(下划线)和$(美元符号),并且不能以数字开头;
  • 严格区分大小写
  • 不能使用关键字
  • 可以中文命名,但不建议
  • 命名规则:建议“驼峰命名法”、“见名知意”,如定义个变量表示学生成绩:studentScore
//演示错误的命名
int 123abc;  //不能以数字开头
int ab*5;     //不能使用除了_和$之外的其它特殊字符
int break;    //不能使用关键字
int score = 90;
System.out.println(Score);  //编译错误,Java大小写严格区分

//演示正确的命名
int abc12;  
int 变量;  //正确但是不建议中文命名
int _12$a;
int MyName;
int myName;  

3)初始化

声明的同时初始化:

int a = 250; 

先声明后初始化:

int a;
a = 250;

 

int a,b=5;  //声明了变量a和b,并给b赋值为5,a没有赋值

  

4)使用

  • 对变量操作就是对它所存的那个数进行操作。
int a = 5; //声明变量a并赋值为5;
int b = a+10; //声明变量b,取出a的值5,加上10后,将和赋值给b
System.out.println(b); //输出b的值是15
a = a+b;  //取出a的值5,再取出b的值15,再把两个数的和重新赋值给a
System.out.println(a); //输出a的值是20
  • 变量的操作必须与数据类型匹配
int a = 3.14;
//报错:类型不匹配,Type mismatch: cannot convert from double to int
  • 变量在使用之前必须声明并初始化
System.out.println(m);  //编译错误,m未声明

int m;
System.out.println(m);  //编译错误,m未初始化

 

2.基本数据类型

   Java语言有8种基本数据类型,分别是用于存储整数、小数、字符和布尔类型数据,分别是:整数类型(包含byte、short、int、long)、小数类型(包含float、double)、char类型和boolean类型(false、true)。

8种类型介绍

数据类型

字节空间 使用场景
byte 1字节(8位) 存储字节数据(较常用)
short 2字节(16位) 兼容性考虑(很少用)
int 4字节(32位) 存储普通整数(常用)
long 8字节(64位) 存储长整数(常用)
float 4字节(32位) 存储浮点数(不常用)
double 8字节(64位) 存储双精度浮点数(常用)
char 2字节(16位) 存储一个字符(常用)
boolean 1字节(8位) 存储逻辑变量(true、false)(常用)

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1 int类型

  整型,占4个字节(32位),最大表示范围:-2^31~2^31-1,-2147483648~2147483647,大概21亿~-21亿。整数直接量默认为int型,但不能超出范围,超范围则编译错误。

int x = 3000000000;  //java默认直接写出的整数直接量是int类型,30亿超出整数范围

//编译错误:The literal 3000000000 of type int is out of range ,超出int范围。

  整数直接量(literal):就是直接写出的整数,如100,除了十进制书写形式,也可以写16进制形式(以0x或0X开头,如0x186a)或8进制(以0开头,如0303240)。

1)两个整数相除,结果还是整数,小数位无条件舍弃;

int a = 5;
int b = 2;
int c = 5/2;
int d = 2/5; System.out.println(c); //结果为整数:2,小数位无条件舍弃
System.out.println(d); //结果为0

2)整数运算时若超出范围,则发生溢出,溢出是需要避免的;

int a = 2147483647;  //int最大值
int b = a+1;  
System.out.println(b);  //-2147483648,结果超出最大值范围,发生溢出,int最大值+1得到int的最小值

2.2 long长整型

  对于较大的整数运算(超出int的范围),可以使用long型,一个long型变量占用8个字节(64位),最大表示范围是:-2^63~2^63-1,即-9223372036854775808~9223372036854775807。

1)长整型直接量需再数字后加L或l

long a = 3000000000l;  //声明一个长整型变量a,赋值为30亿
long b = 3000000000L; //声明一个长整型变量b,赋值为30亿

2)运算时若有可能溢出,建议在第1个数字后加L

//计算10*3亿并输出结果

long a = 10*300000000;   
//两个整型运算默认得到的还是整型,但是结果已经超int范围,所以发生溢出
System.out.println(a);   //结果发生溢出:-1294967296

//如可能溢出,建议在第1个数字后加L,这样得到的结果就是long型,这里发生自动类型转换
long b = 10L*300000000;
System.out.println(b);

3)获取自1970年1月1日0时到现在的毫秒数

//System.currentTimeMillis()可以获取,得到的结果是long型
long time = System.currentTimeMillis();
System.out.println(time);

2.3 double类型

  浮点型,就是小数,包括folat和double,double类型变量占8个字节(64位),double型的精度值是float类型的两倍,所以也成为双精度浮点型。大多数场合使用double表示浮点数。

1)浮点数直接量默认为double型,若想表示float型,需要在数字后面加F或f

float a = 5.6F;
float b = 7.8f;
double pi = 3.14;

2)double型数据在参与运算时,有可能会出现舍入误差,所以精确运算场合不可使用

  2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确表示1/3一样,所以才会出现舍入误差,如果在需要精确运算的时候,可以使用BigDecimal类来实现。

double x = 3.0;
double y = 2.9;
System.out.println(x-y);
//结果是0.10000000000000009,出现舍入误差

2.4 char类型

  字符类型事实上是一个2字节(16位)无符号整数,这个值对应字符的编码。Java字符类型采用Unicode字符集编码,Unicode是世界通用的定长字符集,所有的字符都是16位。

  字符直接量通过单引号表示,如‘中’,也可以采用16进制表示形式,如‘\u4e2d'。

char c1 = '中';  //内存中存的是'中'的编码
char c2 = '\u4e2d';  //‘4e2d’是‘中’对应的16位Unicode编码的16进制表示形式
System.out.println(c1);
System.out.println(c2);

1)采用Unicode编码格式,每个字符都对应一个码,表现形式是字符char,但实质上是码(int型)

  在对char型变量赋值时,有三种方式:

  • 字符直接量:如'A',变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。
  • 整型直接量:范围0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。
  • Unicode:如'\u0041',Unicode字符的16进制形式。

  ASCII('a' = 97,  'A' = 65,  '0' = 48)

public class Test {
	public static void main(String[] args){
		char cha = 97;  //内存中存的是'中'的编码
		char chA = 65;
		char chNum0 = 48;
		System.out.println("97表示字母"+cha);
		System.out.println("69表示字母"+chA);
		System.out.println("48表示数字"+chNum0);
	}

/*
运行结果:
97表示字母a
69表示字母A
48表示数字0
*/

2)字符直接量必须放在单引号中,有且仅有一个

char x = '你';
char y = '你好';  //编译错误

3)特殊字符需要通过\来转义

转义字符 含义
'\n' 表示回车符
'\r' 表示换行符
'\\' 表示反斜杠(\)
'\'' 表示单引号(')
'\"' 表示双引号(")

 

 

 

 

 

 

char x = '\"';
char y = '\\';
System.out.println(x);   //结果: "
System.out.println(y);   //结果:  \

2.5 boolean类型

  boolean类型占1个字节(8位),适用于逻

辑运算,表示某个条件是否成立,一般用于程序的流程控制。boolean类型只允许取值true或false;true表示条件成立,false表示条件不成立,默认值为false。

int a = 5;
boolean b = a-1>0;
System.out.print(b);   //结果:true

 

3.基本类型间转换

  不同的基本类型直接可以相互转换,类型大小关系如下图:

3.1两种方式:

  • 自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。
  • 强制转换:从大类型到小类型,强制转换语法:(需要转换成的类型)变量,强制转换可能会造成精度丢失或溢出。
int a=5,b=5;
long c = a+b;  //发生自动类型转换,int自动转换为long
a = (int)c;   //强制转换,long强制转换为int,因为c=10没有超int范围,所以没发生溢出
long d = 3000000000L;
b = (int)d;   //30亿超出int范围,强制转换发生溢出
System.out.println("d的值为"+d);
System.out.println("强制转换后b的值为"+b);  

/*
运行结果:
d的值为3000000000
强制转换后b的值为-1294967296
*/

3.2 两点规则:

  • 整数直接量可以直接赋值给byte、short、char,但不能超出范围
  • byte、short、char型数据参与运算时,先一律转换位int再运算
char a = 'a';
int b  = a+10;
System.out.println(b); 

/*
运行结果:107
字符a是数字97,运算时先将a转换为码int97再做运算
*/

 

posted @ 2017-05-28 19:54  将暮未暮  阅读(502)  评论(0编辑  收藏  举报