java中equals方法详解有哪些?

Python013

java中equals方法详解有哪些?,第1张

因为你的Value类没有重写equals 方法,这个方法是在Object类中定义的,是可以自己按照需要进行重写的,如果没有重写,其默认的逻辑是比较两个相互equals 的对象的内存地址是不是同一个地址,第一个输出的时候v1,v2都是new出来的,所以v1和v2在堆中是不同的内存地址,所以equals结果为false\x0d\x0a第二个输出,其调用的是Integer类的equals,Integer类中有重写原有equals方法的逻辑,其逻辑是比较两个Integer对象中封装的数字的值,如果相同就返回true,因此第二个输出true\x0d\x0a第三个输出false原理同第一个,两个对象之间使用==比较的就是内存地址,因为都是new出来的,堆内存地址不同,所以输出false\x0d\x0a简单来讲,如果来自同一个类的两个对象,如果没有重写equals方法的逻辑,其==结果和equals结果是相同的,如果有重写equals方法,则==和equals结果可能会不同

就是调用类中的方法,最简单的用法是可以把方法参数化,invoke(class, method)比如你Test类里有一系列名字相似的方法setValue1、setValue2等等。可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue

如:public class  MyTest{ public static void main(String[] args) { String [] names ={"tom","tim","allen","alice"}

Class<?> clazz = Test.class try   Method method = clazz.getMethod("sayHi", String.class)for(String name:names)method.invoke(clazz.newInstance(),name)} catch (NoSuchMethodException e) e.printStackTrace() } catch (IllegalAccessExcepti e.printStackTrace( } catch (IllegalArgumentException  {e.printStackTrace()} catch (InvocationTargetException e)e.printStackTrace() } catch (InstantiationException e {e.printStackTrace( }class Test{public void sayHi(String name){ System.out.println("Hi "+name) }

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

如例题

import java.awt.*

import java.awt.event.*

class MyCanvas extends Canvas implements MouseListener

{

int left=-1,right=-1

int x=-1,y=-1

MyCanvas()

{

setSize(200,200)

setBackground(Color.pink)

addMouseListener(this)

}

public void paint(Graphics g)

{

if(left==1)

{

g.drawString("●",x,y)

}

else if(right==1)

{

g.drawString("○",x,y)

}

}

public void mousePressed (MouseEvent e)

{

x=e.getX()

y=e.getY()

if(e.getModifiers()==InputEvent.BUTTON1_MASK)

{

left=1

right=-1

repaint()

}

else if(e.getModifiers()==InputEvent.BUTTON3_MASK)

{

right=1

left=-1

repaint()

}

}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e)

{

left=-1

right=-1

repaint()

}

public void mouseClicked(MouseEvent e){}

public void update(Graphics g)

{

if(left==1||right==1)

{

paint(g)

}

else

{

super.update(g)

}

}

}

public class Shubiaoshijian

{

public static void main(String args[])

{

Frame f=new Frame()

f.setBounds(100,100,300,300)

f.setVisible(true)

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0)

}

})

f.setLayout(new FlowLayout())

f.add(new MyCanvas())

f.validate()

}

}

中的这一部分

public void update(Graphics g)

{

if(left==1||right==1)

{

paint(g)

}

else

{

super.update(g)

}

}

super.update

详细介绍下到底是什么用处的作用

因为这个地方导致整个程序有些不解

解析:

如果left or right !=1那么面板清空!就这个作用!