5分钟读懂成员变量和局部变量的所有区别

简介: 本文介绍了Java面试中常见的成员变量与局部变量的区别,包括定义位置、生命周期、默认值、修饰符支持、存储位置以及在多线程环境中的表现。成员变量存储在堆内存,生命周期与对象绑定;局部变量存储在栈内存,生命周期较短。在多线程中,成员变量线程不安全,局部变量线程安全。掌握这些区别有助于应对面试中的相关问题。

本次分享在Java面试中超高频出现的话题。成员变量与局部变量,无论是社招还是校招,关于这俩的考点总是层出不穷,面试官也总喜欢用它们做“陷阱题”。


Java中的成员变量和局部变量的区别

成员变量和局部变量主要有以下几点不同

(1)定义位置不同:

成员变量定义在类中,但在方法构造器或代码块之外,局部变量定义在方法构造器或代码块中。


(2)生命周期不同:

成员变量的生命周期和对象绑定,对象存在时,它就存在,局部变量的生命周期则很短。方法执行完后,他就被销毁了。假如有个类实例化了多次,每个实例都有自己的一份成员变量,但局部变量不受影响,运行结果默认值不同。


(3)成员变量有默认值,比如int类型的默认值是零,引用类型的默认值是null,局部变量没有默认值,必须显示初始化,否则会报错。修饰符支持不同成员变量,可以被public ,protected,private等访问修饰符修饰,还可以用static,final等关键字。


局部变量不能使用访问修饰符,只能用final修饰。如果看到局部变量,用public修饰,基本可以确定是语法错误。


(4)存储位置不同,成员变量存储在堆内存,而局部变量存储在栈内存。局部变量存储在栈中,因此存取速度快,但生命周期短,成员变量存储在堆中,可以跟随对象的生命周期。


假如成员变量和局部变量同名,代码如何处理?

在这种情况下,局部变量会屏蔽成员变量,但可以通过this关键字访问成员变量。


在一个多线程环境中,成员变量和局部变量分别会有什么表现?


成员变量是线程不安全的,因为多个线程可以访问同一个对象的成员变量,容易导致数据竞争。局部变量是线程安全的,因为他们存储在每个线程的栈中,不会被其他线程共享。



成员变量和局部变量的区别并不难记,但在不同的场景中,他们的表现会有很多细微差别,所以平时要多加练习才能在面试中轻松应对。

 

 

相关文章
|
存储 缓存 监控
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出 本文来带大家学习Java OOM的三大经典场景以及解决方案,保证让你有所收获!
5572 0
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
|
存储 Java
【面试题精讲】为什么重写equals时必须重写hashCode方法?
【面试题精讲】为什么重写equals时必须重写hashCode方法?
|
28天前
|
安全 PHP 开发工具
Web渗透信息收集进阶
网站敏感目录与文件指易被恶意扫描利用的路径,如后台管理、.git、.svn等,可能导致源码泄露或权限入侵。常用工具如御剑、Dirbuster、Dirsearch可探测此类信息,需加强安全防护。
430 58
Web渗透信息收集进阶
|
3月前
|
Java Spring 容器
DI依赖注入的几种手段
本内容介绍了依赖注入的四种方式:构造器注入、接口注入、Setter注入和注解注入,并重点比较了Spring中的@Autowired与Java标准注解@Resource的区别,包括来源和依赖查找策略。
208 0
|
5月前
|
人工智能 弹性计算 智能设计
🎨 三步打造AI创意工坊 | 通义万相图像生成服务极速部署指南
🚀 从零到大师 | 通义万相智能创作系统部署指南
|
Java Linux 调度
Java线程的优先级详解
Java线程的优先级机制允许开发者根据程序需求为线程设定不同优先级,范围通常在1到10之间,默认优先级为5。高优先级线程在执行时通常会得到更多的CPU时间,但这并不意味着低优先级线程会被完全忽略。系统资源分配仍然取决于具体的调度策略。理解线程优先级有助于优化多线程应用的性能。
510 8
|
8月前
|
机器学习/深度学习 人工智能 编解码
Lumina-Image 2.0:上海 AI Lab 开源的统一图像生成模型,支持生成多分辨率、多风格的图像
Lumina-Image 2.0 是上海 AI Lab 开源的高效统一图像生成模型,参数量为26亿,基于扩散模型和Transformer架构,支持多种推理求解器,能生成高质量、多风格的图像。
489 17
Lumina-Image 2.0:上海 AI Lab 开源的统一图像生成模型,支持生成多分辨率、多风格的图像
|
缓存 负载均衡 算法
HTTPS对性能的一些影响
HTTPS对性能的一些影响
610 9
|
Java 编译器 Serverless
Java 原生化的未来 Graal AOT 编译器
使用 Graal 编译器对 Java 程序进行 AOT 编译使其适合 Serverless 场景。
245 0
Java 原生化的未来 Graal AOT 编译器
|
JavaScript Java 测试技术
基于微信小程序的在线点餐的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的在线点餐的设计与实现(源码+lw+部署文档+讲解等)
139 1

热门文章

最新文章