关于Java变量的声明、内存分配及初始化详解

 更新时间:2017年03月08日 10:50:50   投稿:jingxian  
下面小编就为大家带来一篇关于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中的基本数据类型变量,同样可以发现变量在声明时并没有分配内存,真正的内存分配是在赋初值时进行的。

注上面的有错误,如果是int a;

a变量是分配了内存单元的。a默认值是0;

所以基本类型在声明的时候就分配了内存单元。

以上这篇关于Java变量的声明、内存分配及初始化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring+Quartz实现动态任务调度详解

    Spring+Quartz实现动态任务调度详解

    这篇文章主要介绍了Spring+Quartz实现动态任务调度详解,最近经常基于spring boot写定时任务,并且是使用注解的方式进行实现,分成的方便将自己的类注入spring容器,需要的朋友可以参考下
    2024-01-01
  • Spring Boot Actuator使用说明

    Spring Boot Actuator使用说明

    SpringBootActuator 是一个用于监控和管理 Spring Boot 应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,本文介绍Spring Boot Actuator的使用,感兴趣的朋友一起看看吧
    2025-02-02
  • Java中的 stop the world是什么呢

    Java中的 stop the world是什么呢

    这篇文章主要介绍了Java中的stop the world是什么呢,从字面上讲,就是停止这个世界,看到这个字眼,就觉得这是可怕的事情,那到底什么是stop-the-world,本文给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2023-05-05
  • Java画笔的简单实用方法

    Java画笔的简单实用方法

    这篇文章主要介绍了Java画笔的简单实用方法,需要的朋友可以参考下
    2017-09-09
  • java中Vector类的常用方法详解

    java中Vector类的常用方法详解

    这篇文章主要为大家详细介绍了java中Vector类的常用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 使用jpa原生sql@Query操作增删改查

    使用jpa原生sql@Query操作增删改查

    这篇文章主要介绍了使用jpa原生sql@Query操作增删改查,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • IDEA中thymeleaf语法没有提示的问题及解决

    IDEA中thymeleaf语法没有提示的问题及解决

    这篇文章主要介绍了IDEA中thymeleaf语法没有提示的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java中多线程与并发_volatile关键字的深入理解

    Java中多线程与并发_volatile关键字的深入理解

    这篇文章主要给大家介绍了关于Java中多线程与并发_volatile关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java用单向环形链表来解决约瑟夫环Josepfu问题

    Java用单向环形链表来解决约瑟夫环Josepfu问题

    如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是把尾节点的下一跳指向头结点
    2021-10-10
  • Java获得当前时间前指定几个小时具体时间的方法示例

    Java获得当前时间前指定几个小时具体时间的方法示例

    这篇文章主要介绍了Java获得当前时间前指定几个小时具体时间的方法,涉及java使用Calendar针对日期时间的相关运算与转换操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论