正常情况下一个对象有堆内存空间和指向堆内存的栈空间,如果一个对象只有堆内存空间却没有栈内存指向,这样的对象就叫做匿名对象。
public void getInfo() {
System.out.println("我还是个孩子!");
}
}
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
//直接调用匿名对象的方法
new Person().getInfo();
}
}
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
//直接调用匿名对象的方法
fun(new Person());
}
public static void fun(Person per) {
per.getInfo();
}
}
如果一个对象你预计在整个程序中只使用一次则可以声明为匿名对象。
观察字符串匿名对象
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
System.out.println("hello".length()); //字符串
}
}
如果直接写上一个字符串就是一个匿名字符串对象。我们还可以调用字符串匿名对象的另外一个方法实现内容比较。
观察字符串对象
public class Hello {
public static void main(String[] args) {
//登录验证模拟
String name="smith";
String pwd="1234";
Scanner sc =new Scanner(System.in);
//提示用户输入名字和密码
System.out.println("请输入名字:");
String inName=sc.next();
System.out.println("请输入密码:");
String inPwd=sc.next();
if(name==inName&&pwd==inPwd) {
System.out.println("登录成功!");
}else {
System.out.println("登录失败!");
}
}
}
请输入名字:
smith
请输入密码:
1234
登录失败!
发现了输入的内容和后面设置的用户名密码一直,但是还是没有匹配成功,原因是我们比较用户名和密码的时候使用的是“==”,使用“==”来实现字符串的比较,比较的内容是字符串的内存地址(比较地址而不是比较内容) 。如果要正确比较则应该使用字符串对象的“equals()”方法。
修改
if(name.equals(inName)&&pwd.equals(inPwd)) {
System.out.println("登录成功!");
}else {
System.out.println("登录失败!");
}
请输入名字:
smith
请输入密码:
1234
登录成功!
总结
1.匿名对象的概念
2.匿名对象可以作为方法的参数传递
3.直接协商的字符串也是一个匿名对象,可以调用其方法。.
4.如果要比较两个字符串的内容,那么要使用equals()方法,不能使用==。