java基础学习笔记——数据默认值
趁考试的契机,学习一下java基础,仅记录自己不太熟悉的知识点。
2019/07/13
数字类型的成员,默认值是0,布尔型为false,对象引用缺省值为null。
各种类型的默认值:
public class Test {
boolean test_boolean;
byte test_byte;
char test_char;
short test_short;
int test_int;
long test_long;
float test_float;
double test_double;
String test_String;
public static void main(String[] args) {
Test test = new Test();
System.out.println("default value of boolean: " + test.test_boolean);
System.out.println("default value of byte: " + test.test_byte);
System.out.println("default value of char: " + test.test_char);
System.out.println("default value of short: " + test.test_short);
System.out.println("default value of int: " + test.test_int);
System.out.println("default value of long: " + test.test_long);
System.out.println("default value of float: " + test.test_float);
System.out.println("default value of double: " + test.test_double);
System.out.println("default value of string: " + test.test_String);
}
}
输出:
比较奇怪的是:
char类型的默认值输出居然是这个方形。这是啥意思呢?
其实方形表示的就是不可打印字符。不仅是0,只要是不可以打印字符,输出都是方形。
其实char类型就是一个两个字节的变量,其中存储着unicode编码。用’\uxxxx’这种方法,只是告诉编译器按照16进制去解析,最终输出的符号,是编译器按照unicode编码表解析得到的。
public class Test2 {
char test_char = '你';
char test_char2 = '\u4f60';
char test_char3 = 20320;
char test_char4 = 0x4f60;
char test_char5 = 1;
public static void main(String[] args) {
Test2 test = new Test2();
System.out.println("test_char: " + test.test_char);
System.out.println("char->int: " + (int) test.test_char);
System.out.printf("char->int(hex): %x\n", (int) test.test_char);
System.out.println("test_char2: " + test.test_char2);
System.out.println("test_char3: " + test.test_char3);
System.out.println("test_char4: " + test.test_char4);
System.out.println("test_char5: " + test.test_char5);
}
}
输出:
test_char: 你
char->int: 20320
char->int(hex): 4f60
test_char2: 你
test_char3: 你
test_char4: 你
test_char5:
局部变量没有默认值
局部变量在使用之前必须显示赋值才能使用,否则会有编译错误。由于局部变量使用的是栈内存,主要出于效率的考虑,虚拟机不能为栈上的变量设置默认值,所以局部变量需要显式的赋初值。
除局部变量以外的所有变量都是使用堆内存,现代的机器可以很方便,快速的使大块内存初始化为相同的值,这个特性使得堆内存中的变量都可以由虚拟机赋初值。
还没有评论,来说两句吧...