java10新特性:本地变量(local variable)-var类型推断

Posted Dreamer who

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java10新特性:本地变量(local variable)-var类型推断相关的知识,希望对你有一定的参考价值。

本地变量(local variable)-var类型推断,一种java语法糖,编译器根据代码上下文信息--字面量值、方法调用、声明等,推断变量类型,并且把类型信息添加到对应的生成的字节码里

先来个例子:

public class TypeInference 
    public static void main(String[] args) 
        var time = LocalDateTime.now();
        System.out.println(time);
    

输出:

2019-10-19T16:53:46.328211

变量time直接可以用var来声明类型了。

var类型推断全都是编译器的功劳,当编辑器必须根据上下文信息猜测到该变量的类型信息,否则,字节码生成的时候由于类型不确定会报错提示。

使用var的规则:

  • 本地变量必须初始化

没初始化的变量,编译器没办法根据初始值来判断变量的类型,记住:var不是动态类型,java语言是强类型。

如示例:

public static void main(String[] args) 
        var time;
        var name = null;
        System.out.println(time);
    

错误提示:

  • var 关键字被用在本地类型变量

本地类型变量一般用来存储临时值并且生命周期比较短。本地类型变量一般在方法内、构造函数或者初始化块(示例初始化块或者静态初始化块)内。可以出现的语句块如下图所示:

 

看个其他的例子:

示例:

 public static void main(String[] args) 
        var num = 999_999_999_999;
        System.out.println(num);
    

我们以为这个很大的数字能被java编译器很智能的推断为long类型,可是当我们运行时

IDE同时也给我们提示:

因为数字类型的字面值默认是int类型,这和我们不使用var一样会提示错误:

这两种情况的处理方法就是明确给出数字字面变量值的类型-后面加个字面“L”即可:

 

 

 long num = 999_999_999_999L;
 var num2 = 999_999_999_999L;

还好,决定数情况下IDE会帮助我们提示。

 

以上是关于java10新特性:本地变量(local variable)-var类型推断的主要内容,如果未能解决你的问题,请参考以下文章

JDK10新特性

java新特性--06--JDK10

JAVA8,JAVA9,JAVA10,JAVA11,Spring5新特性原理原理与实践

JDK10 新特性

JAVA8 十大新特性

12月10日 render( locals:{...}) 传入本地变量。