java小点滴
来源:互联网 发布:我的世界枪械js设置 编辑:程序博客网 时间:2024/06/05 02:11
1.= = 和 equals()方法
= = 比较是否指向同一个引用,而equals()比较值
equals()原形
boolean equals(object obj)
{
return this == obj;
}
object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以object把这个任务留给了类的创建者。(暂时还不是太了解.)
一个极端的类
class monster{
private string content;
...
boolean equals(object another){ return true;}
}
覆盖了equals方法。这个实现会导致无论monster实例内容如何,它们之间的比较永远返回true。
所以当用equals方法判断对象的内容是否相等,请不要想当然。因为可能认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果需要使用equals方法,或者使用任何基于散列码的集合(hashset,hashmap,hashtable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。
2.string是否已经改变
string s = "hello";
s = s + " world!";
s所指向的对象是否改变了呢?
答案是没有,因为string被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.
过程:s是一个string的引用变量,它指向的内容为 "hello",然后我们对 s (不是"hello")进行了 + 操作,此时,s所指向的仍是一个string的变量,内容为"hello world",而原来那个 "hello"仍存在于内存中,只不过s不指向它了.
3.声明变量时,初始化尽量放到构造函数中,这样可以减少不必要的开支.
public class demo {
private string s;
...
public demo {
s = "initial value";
}
...
}
而非
s = new string("initial value");
后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为string对象不可改变,所以对于内容相同的字符串,只要一个string对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的string类型属性s都指向同一个对象。
上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,java认为它们代表同一个string对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。
至于为什么要把string类设计成不可变类,是它的用途决定的。其实不只string,很多java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以java标准类库还提供了一个可变版本,即stringbuffer。
3.关于tostring()
每个非primitive对象都有一个tostring()方法,当编译器需要一个string而它却是一个对象的时候,编译器就会自动的调用这个方法,而不需要对象类的对象.tostring()调用。
可以在自己的类中重写tostring()来达到此功能。
class source
{
private string s;
public source()
{
s = new string("returnsource");
}
public string tostring()
{
return s;
}
}
public class tostringtest
{
source se = new source();
private string str = "aaaa";
private string str2 = "bbb";
public string tostring()
{
return str + str2 + se;
}
public static void main(string[] str)
{
tostringtest tt = new tostringtest();
system.out.println(tt);
/////////////result is "aaaabbbreturnsource"
}
}
4.public static void mian(string str[]){}//方法
每个类都可以有一个main()方法作为测试,类可以不是public,只要main()是public的就行。
当 java 类(运行此类)时 ,编绎器会自动调用类.main()方法。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
- java小点滴
- Java Web小点滴
- java中的点滴小知识总结
- java 点滴
- java 点滴
- java 点滴
- java点滴
- JAVA点滴
- java点滴
- java点滴
- java点滴
- java点滴
- Java点滴
- 点滴--生活小常识
- WMI 小点滴
- 点滴小问题总结
- Python点滴小知识
- latex点滴小技巧
- E: 软件包 sun-java6-jre 没有可供安装的候选者---Ubuntu Server下安装jdk遇到的问题
- 聚类算法之CHAMELEON(Java实现)
- 《Java编程思想》学习笔记(二)——构建Java类和Java程序
- javascript String 对象
- Java学习日志(九)
- java小点滴
- 如何将.class文件转换成.java文件——JAVA反编译工具总结[转]
- 用maven构建java project
- java基础--java 循环语句
- JavaScript Table行定位效果
- 小不点儿大的由我做主!
- javascript 中数组使用方法汇总
- JAVA程序员之路
- JavaScript 中 void(0) 的含义