代码如下 | 复制代码 |
class Person { String name; int age; void talk() { System.out.println("我是: "+name+", 今年: "+age+"岁"); } }
public class TestJava2_1 { public static void main(String args[]) { Person p; if(p ==null) { p =newPerson(); }
p.name ="张三"; p.age = 25; p.talk(); } } |
为了更好的了解Java中变量的使用方式,我们做一个实验。将以上代码保存为TestJava2_1.java文件,之后执行 “javac TestJava2_1.java” 命令将代码编译成二进制文件。
编译时将报错,报错内容大致如下:
“TestJava2_1.java:59: 错误: 可能尚未初始化变量p”
编译器认为引用数据类型变量p未初始化,所以不可以判断是否等于null,但我认为编译器对于此错误的表述不太准确。就算变量p没有给予初始值,默认值至少是存在的,那么用默认值和null比较有什么不可以呢。我认为正确的错误表述应该是 “变量p尚未分配内存空间”。“Person p” 仅仅是声明有一个引用数据类型变量p,但并未给p分配任何内存空间,这点和C/C++是不一样的。
将变量p的声明改为 “Person p = null” 后,执行 “javac TestJava2_1.java” 就能够成功编译。可见 “Person p = null” 语句除了赋予变量p初值外,还在赋值前为变量p分配了内存空间。
从上面的实验中可以看出,Java中引用数据类型变量的内存分配在赋初值时进行。用相同的方法测试Java中的基本数据类型变量,同样可以发现变量在声明时并没有分配内存,真正的内存分配是在赋初值时进行的。
注上面的有错误,如果是int a;
a变量是分配了内存单元的。a默认值是0;
所以基本类型在声明的时候就分配了内存单元。
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级