博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于成员变量和局部变量是否都会被默认初始化的问题
阅读量:6546 次
发布时间:2019-06-24

本文共 920 字,大约阅读时间需要 3 分钟。

成员变量可以不用初始化,其具有默认值;但是局部变量一定需要初始化或者赋值后才能使用,否则编译报错。

public class Demo {    int m;    public static void main(String[] args) {        Demo demo = new Demo();        System.out.println(demo.m); //输出0    }}public class Demo {    public static void main(String[] args) {        int m;        System.out.println(m); //报未初始化错误    }}

  1. 首先 Java 语言就是这么规定的。
  2. 然后为什么 Java 语言要这么规定呢?有什么内部机理吗?
可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。
而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。
那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。
for (int i = 0; i < 10; i++) {    int n;    if (i % 2 == 0) {        n = 10;    } else {        n = 20;    }}
像是这个n,我们完全不用JVM帮我们初始化,如果每次循环他都帮我们初始化一次,那么是没有必要的。综上所述,对于局部变量,可能不帮我们初始化是一个不错的选择。(而且JVM实现起来也更容易!!!)
转自知乎:

转载于:https://www.cnblogs.com/JSD1207ZX/p/9386235.html

你可能感兴趣的文章
Git 使用教程
查看>>
spring--基于ioc的配置文件方式
查看>>
“小 U”- UI自动化测试平台 [自动化测试平台开发实战 - 基于 Spring Boot + Kotlin]...
查看>>
easyui的一些使用方法
查看>>
Vue使用过程中的可能会遇到的几个问题
查看>>
TIMO 后台管理系统 v2.0.1 发布,加入 jwt 身份验证组件,基于 Spring Boot
查看>>
Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
查看>>
Log4j_学习_03_自己动手封装log工具
查看>>
Redis的各项功能解决了哪些问题?
查看>>
FastAdmin 极速后台管理框架 1.0.0.20190301_beta
查看>>
Selenium2 WebDriver 启动Chrome, Firefox, IE 浏览器、设置profile&加载插件
查看>>
Python标准库01 正则表达式(re包)
查看>>
Hello,Java女神
查看>>
rpc远程调用开发
查看>>
复习-css控制文本字体属性
查看>>
学习设计模式——观察者模式
查看>>
什么是centos 的epel源
查看>>
删除LVM步骤
查看>>
Zookeeper客户端
查看>>
linux常用指令
查看>>