Java10类型推导

引言       

2018年3月20日,大家期待已久的Java 10发布了,Java 10推出很多新的特性,比如局部变量类型推导、应用类数据共享、并行全垃圾回收器 G1等等,其中和我们开发者息息相关的就是局部变量类型推导,今天我们就来聊一聊Java 10的局部变量类型推导。
概念       
所谓的局部变量类型推导其实就是通过增强java语言特性将类型推断扩展到局部变量,它引入了其他语言中很常见的“var”,其表现形式也类似于JavaScript的中的"var",只要编译器可以推断此种类型,你就不再需要专门声明一个局部变量的类型。
应用场景 
java 10的局部变量类型推导不是在所有的地方都可以使用的,java10规定: 
局部变量类型仅限于如下使用场景: 

  • 局部变量初始化
  • for循环内部索引变量
  • 传统的for循环声明变量
  • 局部变量类型推导


它不能用于以下几个地方: 

  • 方法参数
  • 构造函数参数
  • 方法返回类型
  • 类的字段


示例代码 
1.在定义局部变量的时候使用在定义局部变量时,使用var来定义。
Java10类型推导_第1张图片
分析      
由上面的代码我们发现,在定义局部变量的时候我们使用了var来定义变量,并不会出现编译错误,并且执行也没有任何的问题。查看.class文件我们会发现:
Java10类型推导_第2张图片

虽然在定义局部变量的时候我们使用了var来定义,但是将java文件转化成.class文件的时候,会根据变量的值的具体类型推导出变量的类型,1是数字所以推导为了int类型,"Hello itcast"是字符串所以推导为了String类型。 
小结    
  通过上面的示例我们知道在定义局部变量的时候可以像javascript一样使用var来定义,在java文件转化成.class文件的时候会根据变量值的类型推导出变量的类型。 
2.for循环内部索引变量和内部设置变量时使用 
在进行for循环的时候,内部的索引变量可以使用var来定义。
Java10类型推导_第3张图片
小结       
通过上面的示例我们发现var也可以用在for循环内部定义索引变量时使用,通过也可以在for内部定义局部变量时使用。 
3.var不能定义方法的参数的类型 
在定义方法的时候,var是不能作为方法的参数类型来使用。
Java10类型推导_第4张图片
Java10类型推导_第5张图片
Java10类型推导_第6张图片
总结     
  局部变量类型推导是java10推出的新特性之一,通过示例我们发现在处理var时,编译器先是查看表达式右边部分,并将它作为变量的类型,然后将该类型写入字节码当中,但是局部变量类型推导现在还不完善,只能在特定的场景下才能使用,不能兼容所有的场景,虽然如此,但是它避免了信息冗余,而且对齐了变量名,更容易阅读。

你可能感兴趣的:(技术文章)