import java.awt.*;
public class Test{
Frame f = new Frame();
public static void main(String [] args){
new Test().init();
}
public void init(){
f.setSize(300,300);
f.setVisible(true);
Graphics g1 = f.getGraphics();
Graphics g2 = f.getGraphics();
if(g1==g2) {System.out.println("1");}
else {System.out.println("0");}
}
}
这段测试程序的打印结果是 0,也就是说f前后两次调用getGraphics()返回的g1和g2不是同一对象,这是为什么? 请帮忙研讨一下这问题.
public class Test{
Frame f = new Frame();
public static void main(String [] args){
new Test().init();
}
public void init(){
f.setSize(300,300);
f.setVisible(true);
Graphics g1 = f.getGraphics();
Graphics g2 = f.getGraphics();
if(g1==g2) {System.out.println("1");}
else {System.out.println("0");}
}
}
这段测试程序的打印结果是 0,也就是说f前后两次调用getGraphics()返回的g1和g2不是同一对象,这是为什么? 请帮忙研讨一下这问题.
g1 g2是两个对象,用==比较肯定是false
对象比较要用.equals()方法
if(g1.equals(g2))
A a=new A();
A b=a;
那么a==b就是true
但是要比较两个不同实例内容的话就必须要用equals了
Graphics g1 = f.getGraphics();
Graphics g2 = f.getGraphics();
这两个不是同一个实例,已经不是同一个引用了,所以必须要用equals才能比较到内容
f.getGraphics().setColor(Color.RED);和f.getGraphics().setColor(Color.YELLOW);
则后面的Color.YELLOW与前面的Color.RED互不影响的,因为,这是分别在两个Graphics对象上设置颜色属性。我要问的是为什么同一个f调用两次getGraphics()返回的不是同一个Graphics对象,而产生了两个Graphics对象?
f就是个工厂类的实例了,专门给创建实例出来的
Getgraphics返回的只是Graphics的副本
就是相当于工厂创建Graphics对象了