2018年3月20日,Oracle发布java10。java10为java带来了很多新特性,其中让人眼前一亮的便是var关键字的引入。

从今以后我们可以这样写java代码了。

public class Example {public static void main(String[] args) {var eg = new Example;eg.emptyFunc();}public void emptyFunc() {}
}

很方便是吧,但是java在var上是有要求的。总结起来,有以下三点很重要:

(1)只能用于局部变量上;

(2)声明时必须初始化;

(3)不能用作方法参数。

这三点很重要,但也让我看出了点什么,我大胆猜想,是不是javac会在编译时,悄悄将var换成所赋值的类型呢?

在java1.10的环境下,我们编译上面的代码。

借助于IDEA我们反编译上面的字节码文件Example.class结果如下:

var关键字被替换成了Example。 固然,验证了我们的猜想。我们再来看看下面这些代码:

public class UseVar {public void baseTypeVar() {var a = 1;var b = 255;var c = 256;var d = 10L;}
}

在java10环境下,我们使用javac编译上面的代码,然后借助于IDEA反编译得到的字节码文件UseVar.class文件

很奇怪,a, b, c都被反编译成boolean类型了,倒是d被反编译成long型了,符合预期的结果。至于a, b, c成为boolean类型,倒也验证了我另一篇文章里讲的,jvm是把java中的boolean当做int来理解了。总而言之,var在编译阶段是被会替换成所赋值的类型。

这也验证了上面的三个要求中的两个,为什么var声明变量时必须初始化,以及为什么不能用作方法参数。

【总结】:本质上,java仍然是静态强类型语言,var可以理解为java的一个语法糖。

【问题】:var为什么只能声明局部变量?var声明的变量可以被再次赋值吗?

java10 var关键字浅析相关推荐

  1. Java系列之:var关键字

    Java系列之:var关键字 一.认识var 二.var定义局部变量 三.var接收方法返回时 四.var循环中定义局部变量 五.var结合泛型 六.var在Lambda中使用 七.var不能使用场景 ...

  2. C# 中的var关键字

    C# 中的var关键字 var 是3.5新出的一个定义变量的类型 其实也就是弱化类型的定义 VAR可代替任何类型 编译器会根据上下文来判断你到底是想用什么类型的 至于什么情况下用到VAR 我想就是你无 ...

  3. 什么时候用var关键字

    C#关键字是伴随这.NET 3.5以后,伴随着匿名函数.LINQ而来, 由编译器帮我们推断具体的类型.总体来说,当一个变量是局部变量(不包括类级别的变量),并且在声明的时候初始化,是使用var关键字的 ...

  4. JavaScript中var关键字的使用详解

    作用声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? 1 ...

  5. C语言关键字浅析-enum

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### enum关键字的原型是enumerated type,意思是枚举类型 这是ISO/ANSI C90标准新增的关键字之 ...

  6. 使用 var 关键字在 Java 中使用动态类型

    在本文中,我们将讨论 Java 10 的一项很酷的特性--在 Java 中引入 var 关键字 . 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 Java 获得了 var 关键 ...

  7. C语言关键字浅析-return

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### return关键字是C程序中最常见的关键字之一 对于一个最简单的demo程序,或者说你最早接触的HELLO WORL ...

  8. 深入理解C#中var关键字的用法

    文章目录 一.C# 中的var关键字 二.使用var定义变量的特点 三.示例讲解 一.C# 中的var关键字 var是3.5新出的一个定义变量的类型,其实也就是弱化类型的定义,var可代替任何类型,编 ...

  9. C语言关键字浅析-double

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### double关键字声明一种称之为"双精度"的浮点数据类型 其"双"之处在于与 ...

最新文章

  1. java连接kafka api_Kafka-JavaAPI(Producer And Consumer)
  2. qt designer python显示_请问在python怎么使用qtdesigner设计的ui?
  3. Fiddler抓包使用教程-模拟低速网络环境
  4. PTA —— 基础编程题目集 —— 编程题 —— 7-2 然后是几点 (15 分)
  5. 申请了:苹果已经在测试“毫米波”5G技术
  6. Python中的分组函数(groupby、itertools)
  7. LINUX版本的 MYSQL大小写敏感的处理方式
  8. 【论文分享】ACL 2020 信息抽取与问答系统
  9. 第五章 APP元素定位
  10. PCB硬件设计规范(详细版)
  11. Python pandas.DataFrame.median函数方法的使用
  12. 在虚拟机里通过U盘引导安装Win10教程
  13. Android 软件行为监控系统 的原理 主要是利用binder机制原理添加一个filter
  14. iPhone和ipad连接【华北理工大学】校园网快捷指令教程
  15. Qt 中大尺寸图片的处理
  16. Appcms漏洞+webshell复习
  17. IntelliJ IDEA 在 Project 选项卡中查找快捷键
  18. Spring @Transactional注解出错:CglibAopProxy - Unable to apply any optimisations to advised method
  19. 基于python的学生成绩管理系统毕业设计源码071143
  20. 学习银行业务----存款

热门文章

  1. 项目记录:基于QT的简易音乐播放器
  2. loj 6197. 法克 最小路径覆盖 好题
  3. 做关键词优化排名用什么站群服务器?
  4. this.show() java_Java this的一两点使用
  5. CityMaker学习教程06 数据的发布
  6. 京东提交IPO文件 拟赴美上市
  7. 信息系统项目管理师知识点汇总(2023最新)
  8. 揭穿3个开发者和云计算神话
  9. 【热门主题:快乐海贼王动漫主题】
  10. 思辨领域模型-- DDD≠数据库关系模型