首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JDK 10 中新加的关键字 var,它是个什么玩意?

在群里讨论技术的时候,经常有群友贴出带 var 字样的代码,我看见它当作没看见一样。

经过前几天的恶补才知道,它不仅是 JavaScript 中的关键字,现在也跑到了 Java 的世界。

虽然并不打算用它,但是还是有必要了解一下,以后再看到它的时候,不要再把它当作 JavaScript。

在 JDK10 版本中,Java引入了一个非常实用的新特性——局部变量类型推断(var)。

什么是局部变量类型推断?为什么使用它?如何使用它?

一、什么是局部变量类型推断(var)?

在Java中,声明一个变量时,通常需要明确指定变量的类型,例如:

String name = "John";

int age = 25;

在这个例子中,String和int是我们为变量name和age指定的类型。这是Java的一大特点,因为它是一门强类型语言,每个变量的类型都需要在编译时确定。

但是,随着代码越来越复杂,尤其是在声明变量时,类型往往是显而易见的。

为了简化代码,JDK 10引入了局部变量类型推断,允许我们用var来代替显式指定类型。var让编译器根据右侧的值自动推断出变量的类型。

二、如何使用 var?

在JDK 10中,使用var可以让编译器自动推断出变量的类型。它的基本语法如下:

var 变量名 = 值;

例如,之前我们可能会写:

String greeting = "Hello, world!";

使用var后,可以简化为:

var greeting = "Hello, world!";

在这个例子中,编译器自动推断出greeting的类型是String,因为"Hello, world!"是一个字符串。

三、var 的使用限制

虽然var提供了很大的便利,但它也有一些限制和规则:

只能用于局部变量

var只能用来声明局部变量,不能用在成员变量、方法参数或返回值等地方。

// 错误:不能用 var 声明成员变量

var name = "Alice";  // 错误,不能在类中使用 var

必须初始化

使用var声明变量时,必须立即初始化变量。因为编译器需要根据右侧的值来推断类型。

var age;  // 错误,编译器无法推断类型

不能改变变量类型

var 声明的变量是隐式类型的,声明后不能改变类型。即var声明的变量类型是固定的,不能重新赋值为不同类型。

var x = 10;  // 编译器推断 x 的类型是 int

x = "Hello";  // 错误,类型不匹配

四、var 的优点

简化代码

对于一些类型明显的变量,使用var可以减少冗余代码。

例如,声明集合类型时,通常右侧的值已经足够告诉我们类型是什么,使用var可以避免重复书写:

var list = new ArrayList<String>();  // 自动推断为 ArrayList<String>

提高代码可读性

使用var可以使得代码更加简洁,尤其是对于类型名很长的情况。

例如,写Map<String, List<Integer>>时,使用var可以减少重复的部分:

var map = new HashMap<String, List<Integer>>();  // 更简洁

适用于匿名类型

var在处理匿名类或返回值类型不明确的情况下非常有用,避免了显式指定冗长的类型:

var thread = new Thread(() -> System.out.println("Hello!"));

五、var 的缺点

降低类型明确性

使用var时,变量的类型由编译器推断,代码阅读者无法立刻知道变量的类型,这可能会影响代码的可读性,特别是在复杂的表达式中。

因此,var更适合用于类型明显或易于推断的地方。

可能导致错误

如果我们使用var时没有仔细检查右侧的表达式,编译器推断的类型可能与我们期望的不一致,导致一些难以发现的错误。

六、什么时候使用 var?

类型明确的场景

当我们能够清晰知道变量的类型,且右侧的赋值表达式足够清晰时,使用var可以让代码更加简洁。

var price = 19.99;  // 自动推断为 double

集合和泛型类型

在处理集合和泛型类型时,var尤其有用,减少了冗长的类型声明。

var list = new ArrayList<String>();  // 自动推断为 ArrayList<String>

匿名类和 lambda 表达式

在处理匿名类或lambda表达式时,var使得代码更简洁。

var thread = new Thread(() -> System.out.println("Hello"));

最后总结

JDK 10的局部变量类型推断(var)是Java语言中的一项非常实用的功能,它可以让代码更加简洁,减少重复的类型声明。

不过,使用时需要小心,避免代码变得难以理解。var适合用于类型明确、赋值清晰的情况,不适合用在复杂或不易推断类型的场景中。

终于明白 var 是啥玩意了,不一定要用它,但一定要知道它是啥。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oaa7aJXAJO4Us4seiXULQvhg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券