博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
var 是 Java 开发的好朋友啊!
阅读量:7032 次
发布时间:2019-06-28

本文共 1937 字,大约阅读时间需要 6 分钟。

hot3.png

 

简评:Java var != JavaScript var。

Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你。

什么是类型推断

其实在 Java 中类型推断早就存在了,看下下面的例子:

public void doSomething() {    final List
names = new ArrayList
(); // ^^^^^^------- Redundant ...}

在这个例子中给 ArrayList 定义持有的类型就没必要了,因为 List<String> 已经定义了我们需要的类型 String ,在 Java 7 中增加了类型推断,这时例子可以直接写成

public void doSomething() {    final List
names = new ArrayList<>(); // ^^------ Inferred! ...}

这两种写法是完全合法的,而且最终会形成一样的字节码。对经常使用泛型的开发者来说,可能早就对上面的类型推断写法习以为常。

那什么是局部变量类型推断?

即能推断出方法中局部变量的类型,这是 Java 10 中新增的特性,对应关键词 var,看个例子 :

public void doSomething() {    final ??? name = "Todd";}

name 是什么类型,很明显是 String,而 Java 10 就可以让编译器帮我们判断其类型,我们只要写成下面的形式:

public void doSomething() {    final var name = "Todd";   // name is inferred as a String!}

var 的使用不局限于函数内声明的变量,同时也可以用于循环的索引:

final List
names = new ArrayList<>();public void doSomething() { for(var name: names) { System.out.println("Name: " + name); } for(var i = 0; i < names.size(); i++) { System.out.println("Name: " + names.get(i)); }}

我必须使用 var 吗?不是的,老方法一样完美支持。

这样的做法危险吗?

一个字:不。

简单说它是受限于它们存在的方法(或循环声明)的范围。这意味着除了声明它们的方法的开发之外,人们不编写依赖于这些类型的代码。

还有大家会有一个疑惑,很多语言也是不需要定义类型的,完全由编译器搞定,以 JavaScript 举例:

var x = "Todd"

简单吧,x 是 String 类型的,但是在 JS 中能重新定义类型,比如:

var x = "Todd"x = 42  // Now it's an int?!

像这种 Java 以后是不是也不用考虑变量类型了?错,和JS 不一样,Java 中的 var 只能在局部变量使用外,同时是不能重复赋值的,就拿上面的例子,会导致编译错误:

public void doSomething() {    var x = "Todd";    x = 42;    // Compiler fails on this line:                // Error: java: incompatible types: int cannot be converted to java.lang.String}

所以 var 一点都不危险,Java 也不会因此变成动态类型分配语言,这仅仅是对局部变量多了一种定义方式。

总结下

  1. Var 是我们的好朋友;
  2. Java var != JavaScript var;
  3. Var 解决了你显示声明变量的一些麻烦,但他们依然存在;
  4. Var 声明的变量和显示声明的变量是一模一样的;
  5. Var 类型变量不会影响到你其他的代码;
  6. 多了解一下总不会错吧!
原文链接:

 

转载于:https://my.oschina.net/jpushtech/blog/2885250

你可能感兴趣的文章
HDFS简介
查看>>
java-第十一章-类的无参方法-模拟ATM机进行账户余额查询
查看>>
linux eclipse中C++连接mysql数据库
查看>>
linux apache服务器配置虚拟主机
查看>>
Nginx服务器配置对https的支持
查看>>
shell脚本之函数的定义及使用
查看>>
sar
查看>>
RPM 校验软件包完整性
查看>>
springSecurity配置详解
查看>>
解决VIM中文乱码的一次经历
查看>>
菜鸟学Linux 第101篇笔记 tomcat基本原理
查看>>
php7安装----
查看>>
VNX NETAPP NAS 备份恢复
查看>>
HashMap的存储原理
查看>>
2007年最強的电脑喇叭和耳机升級 马上拥有百万級SRS专利技术 [中文增強版]
查看>>
高可用集群之分布式文件系统(续一)
查看>>
ansible(续一)
查看>>
SSH,SCP,SFTP命令汇总
查看>>
#26 Linux kernel(内核)详解与uname、lsmod、modinfo、depmod、insmod、rmmod、modprobe...命令用法...
查看>>
数组和指针关系的探讨
查看>>