Java 中方法入参的参数是一个对象属性,是否需要声明为局部变量。两种的性能有区别吗,第二种方法是否会在堆栈中创建引用

lijianbo_java 2020-02-26 10:41:22
public class Test {

public static void main(String[] args) {
User user = new User("ZhangSan");

//第一种写法
String username = user.getName();
userService.findUserByName(username);

//第二种写法
userService.findUserByName(user.getName());
}

}
...全文
544 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-02-28
  • 打赏
  • 举报
回复
引用 楼主 LiJianbo_Jon 的回复:
public class Test { public static void main(String[] args) { User user = new User("ZhangSan"); //第一种写法 String username = user.getName(); userService.findUserByName(username); //第二种写法 userService.findUserByName(user.getName()); } }
2种写法效果是一样的。稍微有一点差别,按以前的说法,第一种方法是空间换时间,就是把数据提前存入内存中,以减少数据反复读取的时间。第2种方法就是以时间换空间,就是以反复读取为代价,降低内存的消耗。已现在的软硬件水平,哪种方法更性能高真的说不清楚,只能实际当中自己测试咯。
lijianbo_java 2020-02-28
  • 打赏
  • 举报
回复
感谢大家的积极回复。确实,这就是一个时间和空间怎么取舍的问题。具体情况需要具体处理。
tianfang 2020-02-27
  • 打赏
  • 举报
回复
JIT 编译后估计是一样的代码
阿豆响当当 2020-02-27
  • 打赏
  • 举报
回复
没有区别,看似是传递对象的属性,实则程序的取值过程都是一样的,object--->String
CS_草祭先生 2020-02-27
  • 打赏
  • 举报
回复
首先说明一下这两种方式没区别。 其次说一下,如果需要了解性能,可以自己做大数量的测试。一切抛开数量谈性能的代码都是耍流氓。
qybao 2020-02-27
  • 打赏
  • 举报
回复
这种问题说白了就是时间空间的问题。 对于findUserByName方法来说,没区别,因为参数的表达式会先执行,然后把表达式的结果复制给参数,也就是说findUserByName方法拿到的参数就已经是表达式的结果了,所以这个参数是表达式也好,普通变量也好,都没关系。 但是对于main方法来说不一样,main方法多一个变量(也就是main方法栈对一个局部变量的储存空间)。如果只是一次调用findUserByName方法,那么第二种相对好一些,因为运算操作一样,第二种省去中间变量的空间;但如果是多次调用findUserByName,并且参数一样,那就第一种相对好一些,因为虽然花多一点内存空间,但减少运算次数(第二种的参数的表达式会多次执行)。 所以花空间(内存)还是花时间(操作次数)要你自己去平衡。就好像数据结构里说的空间复杂度和时间复杂度,拿空间换时间,还是拿时间换空间,就看你的业务怎么取舍。
游北亮 2020-02-27
  • 打赏
  • 举报
回复
如果只是取对象属性,那么这2种方法的性能几乎没差别,不要去纠结。 如果是执行一些方法逻辑,那么应该用第一种写法,性能好。
游北亮 2020-02-27
  • 打赏
  • 举报
回复
这2种写法没有区别,如果是下面的代码,会有一丁丁点差异: //第一种写法 String username = user.getName(); userService.findUserByName(username); userService.findUserByName(username); //第二种写法 userService.findUserByName(user.getName()); userService.findUserByName(user.getName());
WPS Office 2019 是一款功能丰富的办公软件套装,它整合了文字、表格、演示、PDF 等组件,具备体积小巧、功能丰富、兼容性强等特点,能满足日常办公的多种需求。 功能组件丰富:包含 WPS 文字、WPS 演示、WPS 表格、WPS PDF 等组件,可用于文档编辑、表格计算、幻灯片制作、PDF 处理等,支持 DOC、DOCX、XLS、XLSX、PPT 等多种格式,能与 Microsoft Office 较好地兼容。 支持云存储与协作:用户登录 WPS 账号后,可实现多终端、跨平台的数据同步,还能与他人协同办公,文档可通过微信、QQ 等社交平台一键分享。 PDF 功能强大:提供沉浸式 PDF 阅读体验和稳定的编辑服务,支持一键编辑 PDF 文档内容。借助 OCR 技术,可精准转换文档、表格、PPT、图片等格式的文件。 界面设计优化:具有全新视觉设计,默认皮肤舒适清爽,还支持桌面背景、界面字体、皮肤、格式图标等个性化设置。同时,文档标签可拖拽成独立窗口或合并,用户可自主选择文档显示方式,还能将文件放置在不同工作区,便于分类浏览与管理。 内置实用工具:内置了简单的网页浏览器,点击文档的链接默认用其打开,可进行网页添加到首页、另存为 PDF 等操作。此外,“应用心” 集成了输出转换、文档助手、安全备份等多种实用功能。 模板资源丰富:稻壳商城提供了大量模板、范文、图片等素材资源,涵盖求职简历、总结计划、合同协议等常见文档类型,方便用户快速创建专业文档。 表格功能特色突出:支持通过关键词快速切换工作表,设有阅读模式和护眼模式。还可分类合并单元格,以及拆分合并单元格并填充内容。公式编辑器可轻松完成公式嵌套,筛选时可通过 “仅筛选此项” 一步完成特定值筛选,还能根据筛选条件生成动态分析图表。另外,“特色功能” 和 “智能工具箱” 菜单包含 PDF

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧