zoukankan      html  css  js  c++  java
  • Java变量的声明、内存分配及初始化

    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 = new Person();
            }
            
            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中的基本数据类型变量,同样可以发现变量在声明时并没有分配内存,真正的内存分配是在赋初值时进行的。

  • 相关阅读:
    浅谈ES6
    iframe的应用
    vue时时监听input输入框中 输入内容 写法
    点击模态框滑动出来 抽屉
    this.$router 和this.$route 的区别
    iview框架 两侧弹框 出现第二层弹框 一闪而过的问题
    input框中的必填项之取消当前input框为必填项
    v-model 的修饰符
    单页面开发和多页面开发的优缺点
    原型继承+借用构造函数继承 的一些理解
  • 原文地址:https://www.cnblogs.com/xiaojihua20/p/4118614.html
Copyright © 2011-2022 走看看