论坛首页 入门技术论坛

java基本编程要点之final、equals和==、String 与StringBuffer的区别

浏览 2146 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-30  

昨天自已复习了一下JAVA基础,本来想将昨天回顾过的JAVA基础都写出来的,但想着又太基础了,于是,

现在将一些值得注意的要点写一下。

1. 首先我们来看一下JAVA中的常量定义--关键字:final

1.1变量定义: 在JAVA中,使用关键字final来表示常量,而C++使用const来定义常量,在JAVA中,const是

保留关键字。关键字final表示只能对变量赋一次值,其值一是设定,便不能更改。一般来说,常量名都使用

大写,如:final double CM_PER_INCH = 2.54; 在JAVA中,常常希望一个常量在某个类的多个方法中都是

可用的,这种常量通常称作类常量,使用关键字static final可设定类常量。

1.2类与方法使用关键字final定义:

类:使用final修钸类,表示该类不能被继承,在JDK API库中,String类就是一个final类

方法:使用final修钸方法,表示该方法不能裤override,可overload.

2:equals()方法与 == 之间的区别

equals 方法判断两个字符串是否想等,其背的含义是判断两个字符串的值是否相等,如果需要判断两个对象

是否相等,判断的是两个相同类型的对象的域数据相等则这两个类对象相等,一般情况下建议对toString()方法

进行override.

== 操作符来检测两个字符串是否相等,一般情况下,不建议使用==操作符来判断两个字符串是否相等,==

操作符只能判定两串是否存储在同一个内存区间位置。当然字符串在同一个内存位置,哪么它们必然相等。但

是也完全有可能把串的多个拷贝存在不同的内存空间。

String s = "hello";

if(s=="hello")//这是对的,

if(s.subString(0,4)=="hell")//可能错的

在JAVA 虚拟机中,只有字符常量会被共享,而+或subString等操作产生的结果串并不共享,因此,不要使用

==操作符来比较字符串。

3:String 与StringBuffer的区别

String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独

字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可

以把字符串设为共享的。

StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用

StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得

多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大

的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使

用StringBuffer类就避免了这个问题.

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics