java中常被忽略的几个问题
来源:互联网 发布:淘宝开店必备 编辑:程序博客网 时间:2024/05/29 15:38
下面是自己根据Java六大问题你都懂了吗?自己归纳的,仅供参考,如果想看详细的请点击超级链接:
1、"=="和equals方法究竟有什么区别?
== 操作符是专门来比较变量的内存地址是否相等而不是对象本身,而equals是比较对象的内容。不过要注意的是,如果你要看清楚该类的equals方法底层是否也用了==操作符,不要想当然。
2、final关键字
final关键字,都知道如果修饰变量,该变量不能被修改,也就是不能改变,但是由于对象型变量的本质是"引用",使得"不变"也有了两种含义:引用本身的不变,和引用指向的对象不变。
例子:
引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!");//编译通过
可见,final只对引用的"值"有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的"值"相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。
** final只对引用变量的内存地址有约束力,对其对象内容的变化不具有约束力,这点类似于==操作符 **
3、 对于String s = "Hello World!"的理解
这个语句生命的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向“Hello World!” 这个String类型的对象
** 我们只是声明了一个只能指向String对象的引用变量所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
4、string到底变了没有
没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码:
String s = "Hello";
s = s + " world!";
string的内容并没有改变,而是在内存中重新开辟了一个位置存放Hello World然后将s指向新的内容,所以不是内容变化了,而是s不在指向原来的那个对象了,而是指向了另一个String对象。
- java中常被忽略的几个问题
- MathType中常遇到的几个问题
- 常用函数中常被忽略的小技巧(2)
- (X)HTML中常常被忽略的DOCTYPE
- VS2008 MFC中常出现的几个问题
- 电路设计中容易忽略的几个问题
- 在C语言编程中常遇到的几个问题
- ireport实现报表打印中常出现的几个问题
- SEO中常忽略的事儿 你遇到了吗?
- js 中常常忽略的bug(一)
- 初学JAVA的几个问题
- 关于Java的几个问题
- Java面试的几个问题
- 关于Java的几个问题
- Java类的几个问题
- java中常用到的语句
- Java中常量的应用
- Java中常被问到的问题
- 盒炯颓俏簿恃于挛堵悠资臼释核特
- android:EditText属性/去边框
- web服务器--apache
- oracle rpad()函数
- Apache POI组件操作Excel,制作报表(三)
- java中常被忽略的几个问题
- 自旋锁、排队自旋锁、MCS锁、CLH锁
- 如何组织一个高效的开发团队?
- 关于Java的装箱小测试
- 关于ListView的HeaderView
- OCP 1Z0 053 46
- 远程登入mysql
- Tomcat访问日志详细配置
- 互联网时代商业模式的创新探讨