class This
{
This()
{
System.out.println(this);
}
public static void main(String [] raja)
{
new This();
System.out.println(new This());
}
}
output:
This@470285d8
This@76a14c53
This@76a14c53
为什么程序的输出被打印3次?这个关键字指的是当前的类实例,但这里为什么引用不同,即第一个引用与其他两个引用不同?
通过创建引用来改变相同的代码:
class This
{
This()
{
System.out.println(this);
}
public static void main(String [] raja)
{
This t = new This();
System.out.println(t);
}
}
output:
This@76a14c53
This@76a14c53
这只打印两行,但为什么上面的程序打印3次,为什么这里的引用没有改变。
答案 0 :(得分:5)
您的构造函数打印一行,所以:
new This();
System.out.println(new This());
在这里你调用构造函数两次,System.out.println()
也打印一行,所以你得到三行。
此外,您正在创建两个不同的This
个对象。
在你的第二个例子中,构造函数只被调用一次,所以你只得到两行。
此示例仅创建一个 This
对象:
This t = new This();
System.out.println(t);
答案 1 :(得分:0)
在第一种情况下,您创建了2个对象,因为构造函数和main具有@Override
public void onReceive(Context context, Intent intent)
{
context.startService(new Intent(context, MainService.class));
context.startActivity(new Intent(context, AlertActivity.class));
}
。程序打印3次。
在第二种情况下,你只在构造函数和主运行中创建了一个对象System.out.println(this)
并打印了对象System.out.println(this)
结果2次
答案 2 :(得分:0)
class This
{
This() // This is the constructor. It gets called automatically everytime a new instance is created
{
System.out.println(this);
}
public static void main(String [] raja)
{
new This(); // Second instance
System.out.println(new This()); // Third instance
}
首次运行程序时会生成第一个实例。因此,你得到3个输出。
在第二个代码中,您创建一个This
对象,然后调用它。总共有两个实例:首先是你运行的那个实例。其次,您创建的那个:This t = new This();
。因此,在这种情况下有两个输出。