JAVA基础——写代码

来源:互联网 发布:淘宝买增加付款方式 编辑:程序博客网 时间:2024/05/22 01:33

声明了什么

String s = "Hello world!";

s:指向String类型对象的引用变量(即内存地址),目前指向"Hello world!"这个String类型对象

 

String string = s;

string:指向与s一致的对象

 

"=="和equals方法究竟有什么区别

"=="比较变量的值是否相等

int a=10;

int b=10;

则a==b将是true。

但不好理解的地方是:

String a=new String("foo");

String b=new String("foo");

则a==b将返回false。

a与b的值就是内存地址,由于引用的不同内存地址,所以不等

 

对象的内容比较,应该用equals

看一下Object对象的equals方法是如何实现的:

boolean equals(Object o){ return this==o; }

Object 对象默认使用了==操作符。所以如果你的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果

比较两个对象内容是否相等,应该由类的创建者决定,所以Object把这个任务留给了类的创建者。

 

 

String到底变了没有

因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。

String s = "Hello";

s = s + " world!";

在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

比如你找了个老婆,后来经不住诱惑又搞了个情人,可是你不能有了情人,把老婆甩了吧。所以要苦了你的钱包了。两个开销肯定要比一个大。

 

 

final关键字到底修饰了什么

final迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。

比如你和老婆在逛街,老婆很霸道,可是街上靓妹很多,这时你的目光一直停留在别人那里,那肯定要吃不了兜着走了,所以只能。。。

 

 

到底变量要怎么样初始化

1. 类的属性,或者叫值域

2. 方法里的局部变量

3. 方法的参数

对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
long类型变量默认初始值为0

所有对象引用类型变量默认初始值为null,即不指向任何对象。

对于第二种变量,必须明确地进行初始化。

其实第三种变量和第二种本质上是一样的,都是方法中的局部变量,传入的值就是初始值

 

TO be continue

 

原创粉丝点击