这次我们再来说说,Java中变量的那些细节。
一、变量的划分
再说划分前,先简单提一提变量。
变量其实很简单,就是内存中的一块存储区域,这个区域有自己的名和类型。
- 声明的位置划分
成员变量
类似C++中的全局变量,但C++中全局变量可以在方法或类外声明,而Java中的所有变量必须在类中声明。
局部变量
一段语句中定义的变量。
- 所属类型划分
基本数据类型变量
八大基本数据类型:boolean,char,byte,short,int,long,float,double。
引用类型变量
Java中的类,数组,接口等。
二、基本数据类型
boolean :在Java的条件判断中,只能是true和false,不像C++中一样,0代表false,非0代表true。
char:存储单个字符,一个汉字也是可以的,例如,char c = '字';
原因:Java使用Unicode编码,Unicode为每种语言制定统一且唯一的二进制编码,
因此一个中文字符跟一个英文字符所占空间相等。
byte:注意数据范围为-128~127。
float:默认浮点型为double,声明float需加f/F。
数据类型转换
- 自动类型转换
容量小的自动转大的 :byte → short → int → long → float →double; char → int;
多类型混合运算:系统先转化成最大的那个数据类型,然后再计算。
byte,short,char 三者计算时转化为int类型。
System.out.println(‘a’+1);
//output:98
short s = 5;
byte b = 3;
//错误的写法,自动转换为整型运算
// s = s-2;
// b = b + 4;
//short t = s + b;
//强制类型转换
s = (short)(s-2);
b = (byte)(b+4);
short t = (short) (s + b);
- 强制类型转换
前文的实例中已经提到了,即把类型由大转小,但易造成数据丢失或溢出。
注:boolean不能转换成任何类型。
三、引用类型
通过使用关键字 new 来创建,例如String s = new String("hello"); 。
不过有一种例外:String s="hello";。
这是一种非常特殊的形式,和new有本质的区别。它是java中唯一不需要new就可以产生对象的途径(基本数据类型不是对象,可以参考我的另一篇博客从内理解对象创建来理解与数据类型相关的问题)。