java中的相等性总结
学java有段时间了,以下是个人的一点心得体会,希望能够帮助那些刚开始编程的同志们。
几天前,一同学让我帮忙看他的程序到底出现什么问题,代码比较乱,也没有注释,我看了很
长一段时间竟是找不到问题所在。程序大体是这样的,有一段文本taxt,从中间找出任意词语句子进行替
换,当时他使用if判断后进行替换.
String selectText=Text.area1.getSelectedText();
String searchText = Text.searchText;
if(selectText == searchText)
{
.......
}
写到这里估计明眼人一看就知道问题所在,==的使用有问题!由于自己对这部分内容比较生疏,所以上
网搜了一下发现有不少人碰到equal与==的问题,出于加深理解决定写一篇文章,写的不好欢迎拍砖,
以期抛砖引玉之效,还请高手不吝赐教。
相信学习java的同志们都清楚,那么现在打开API看一看类object吧,Object 是类层次结构的根类。
每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法,Object有一个构造函数。
public int hashCode()
public boolean equals(Object obj)
public String toString()
protected void finalize()
protected Object clone()
public final Class<?> getClass()
public final void notify()
public final void notifyAll()
public final void wait(long timeout)
public final void wait(long timeout,int nanos)
public final void wait()
数了一下除过构造函数,Object总共有11个对外可使用的方法,将这11个方法按照是否可以继承重写来划
分,可以看到我们比较常用的几个方法toString(),equals(),hashCode()不常用但在使用Map时很重要而
且很容易出问题,接下来我们就集中看看这几个方法,
查看jdk中的源代码:
package java.lang;
public boolean equals(Object obj) {
return (this == obj);
}
public String toString() {
return getClass().getName()+ "@"
+Integer.toHexString(hashCode());
}
public native int hashCode();
可以看到,Object提供的equals方法是通过"=="实现的, 而Think in java(4th) P44页
public class Equivalence
{
public static void main(String[] args)
{
Integer a = new Integer(4);
Intege
相关文档:
1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。
2、命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer、 HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii ......
import java.util.Enumeration;
public class CipherTest implements Enumeration {
private int N;
private int c[], k;
private Object[] objs;
public CipherTest(Object[] items) {
N = items.length;
c = new int[N + 1];
for (int i = 0; i <= N; i++)
c[i] = i;
objs = items;
k = 1 ......
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.*;
public class ThreadDemo extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public ThreadDemo() {
JButton btn = new JButton("Click me");
btn.addActionL ......
自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况。
package com.wmmad.test;
import junit.framework.TestCase;
/**
* @author madding.lip
*
* <pre>
* class: compare the autoboxing and unboxing and normal's performance
......
一些java类中为什么需要重载 serialVersionUID 属性。
在Java中,软件的兼
容性是一个大问题,尤其在使用到对象串行性的时候,那么在某一个对象已经被串行化了,可是这个对象又被修改后重新部署了,那么在这种情况下,
用老软件来读取新文件格式虽然不是什么难事,但是有可能丢失一些信息。
serialVersionUID
来解 ......