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会帮助我们提示。

发布了296 篇原创文章 · 获赞 178 · 访问量 124万+

猜你喜欢

转载自blog.csdn.net/doctor_who2004/article/details/102640347