public class SliderTest
{
   public static void main(String[] args)
   {  JFrame f=new JFrame();
      f.setSize(100,100);
      f.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
      JTextField textField=new JTextField(20);
      f.getContentPane().add(textField);
      textField=new JTextField(10);
      f.getContentPane().add(textField);
      f.show();
   }
}
程序执行没问题,但是我有个疑问,textField能被new二次吗?

解决方案 »

  1.   

    可以,textField只是个变量名,引用一个对象,第一次执行add之后,它所引用的那个东西已经被加入到界面中了,那么它以后是否还引用那个东西也就没什么关系了。
      

  2.   

    new一个新对象,并赋值给一个变量,那其实就是一次引用的赋值而已。
    在这一点上,跟下面这个几乎没什么区别。
    int i = 5;
    System.out.println(i);
    i = 6;
    System.out.println(i);
    其中i被赋值了两次。关键在于你原来的说法有问题:“textField能被new二次吗?”,textField只是个变量,它没有被“new两次”,一次也没有,它只被赋值了两次而已。
    new返回一个新对象的引用,因此可以赋给一个变量名。你上面的代码从效果上完全可以改成:
    f.getContentPane().add(new JTextField(10));
    所以,textField只是个记号而已。
      

  3.   

    显然可以
    textfield又不是static也不是finnal,它所占有的空间是可以改变的!第一个textfield对应的对象是 new JTextField(20)引用所指向的对象
    第二个textfield对应的对象是 new JTextField(10)引用所指向的对象第一个对象被第二个覆盖了