java 8 新特性中p->p.setLastName("Doe"));

Python018

java 8 新特性中p->p.setLastName("Doe"));,第1张

这是lambda表达式,也就是匿名函数,对于

persons.forEach(p->p.setLastName("Doe"))

这句代码,persons是一个list,forEach是一个内部迭代的方法,p->p.setLastName("Doe")是一个匿名函数对象

这个语句等价于

for (Person p : persons) {

p.setLastName("Doe")

}

但是用for循环是外部迭代,速度略慢。

p->p.setLastName("Doe")

p是指list当中取出的对象,p可以自己定义,你写a也可以,相应的就要变成

a->a.setLastName("Doe")

->是lambda表达式的符号,->左边的对象去传入lambda函数体p.setLastName("Doe"),是前面传入的p去调用setLastName方法,如果要调用多个方法,那么方法体要用花括号包含

例如persons.forEach(p->{

p.setLastName("Doe")

System.out.println(p)

})

综上所述

persons.forEach(p->p.setLastName("Doe"))

是把p->p.setLastName("Doe")这个函数对象,给了persons的迭代器,让迭代器用这个函数去对集合中的每一个对象使用

有了lambda,你可以这样定义一个新的线程

new Thread(() ->{System.out.println("hello word!")}).start()

() ->{System.out.println("hello word!")}这句语句其实就是runnable接口的实现对象,

编译器会根据函数需要实现的接口去隐式转换,Thread的构造方法需要传递Runnable接口的实现类,所以new Thread(() ->{System.out.println("hello word!")}).start()相当于

new Thread((Runnable)() ->{System.out.println("hello word!")}).start()

其中()是匹配接口中的无参函数,因为Runnable接口中run方法为无参所以是()

->指明前面是传入参数,后面是函数体

有了lambda就能写出更加漂亮的代码,以及更少的工作量,实现一个方法的接口用匿名内部类的话看起来是冗余代码了

纯手打望采纳

楼上的说得不太准确,准确地讲,p不是一个对象,其实p是一个引用.初学JAVA的时候可以把p理解成一个对象,但是到了后面编程,你会出现很多错误.

我们把你的这个代码拆开来讲,

Person p执行这句代码时会在内存中开辟一段存储空间,用以存储一个引用(指针),由于你没有给这个引用(指针)赋值,所以,p现在是空指针,p==null成立!

new Person()的意思新建一个Person对象,然后放在对象栈中,对象栈是一个专门存放对象的一段存储空间,不能直接访问的,需要通过引用(指针)来间接访问,

最后解释=号的作用,他是说把后面的对象的引用(指针)赋给前面的,于是p就指向了一个对象.你现在就可以通过p来操作对象栈的对象了.

也许你会讲既然p始终指向的是该对象,那么直接认为他就是一个对象为什么说不对呢.来看看下面的代码(假设Person类有个public 变量int age代表一个人的年龄)

Person p=new Person()

p.age=10 //设置p的年龄为10岁

Person p2=p

p2.age=20 //设置p2的年龄为20岁

System.out.println(p.age) //在屏幕上输出p的年龄

你认为会输出多少呢 ? 10? 那你就错了,屏幕上会输出20

因为p,p2是一个引用,p2=p的意思是把p的引用给p2,此时p和p2是同一个对象,在对象栈中指向同一个对象.p2改变了对象栈中的对象,因此p.age也会变.这个在C++中叫做浅拷贝,就是只把引用给p2,并没有生成新的对象.

也许你会说,只要我不用p2=p这样的语句就不会错误了吧,但是在后面编程中你会把一个对象从一个类传到另一个类中,这样就避免不了这种浅拷贝.所以正确理解p的意义非常重要!

是jsp 中插入HTML

<p>换行<br>也是

<b>是粗体字需要</b>结束标志

例如:

<html>

<body>

<b>我爱<p>你!</b><br>好不?

</body>

</html>

结果:(前面两行是粗体,百度不能写粗体)

我爱

你!

好不?