《java编程思想》--基础知识

来源:互联网 发布:linux开机启动mysql 编辑:程序博客网 时间:2024/06/05 04:40

==和equals

先看一段代码:

public class Equivalence {    public static void main(String[] args) {        Integer n1 = new Integer(50);        Integer n2 = new Integer(50);        System.out.println(n1 == n2);        System.out.println(n1 != n2);    }}输出结果是:falsetrue

原因是==和!=都是比较的引用,而不是比较值,所以,如果是对象之间(非基本数据类型)想比较内容是否相同,需要用eauqls()方法,如下:

public class Equivalence {    public static void main(String[] args) {        Integer n1 = new Integer(50);        Integer n2 = new Integer(50);        System.out.println(n1.equals(n2));    }}输出结果是:true

然而事情并不是这么简单,再看下一段代码:

class Value{    int i;}public class Equivalence {    public static void main(String[] args) {        Value n1 = new Value();        Value n2 = new Value();        n1.i = n2.i = 50;        System.out.println(n1.equals(n2));    }}输出结果是:false

是false的原因是equals()默认也是用来比较引用的,Object类中的源码如下:

public boolean equals(Object obj) {        return (this == obj);    }

你自己定义的类中必须覆盖equals()方法才可以用自己希望的方式去比较,如下:

class Value{    int i;    public boolean equals(Value obj) {        return (this.i == obj.i);    }}public class Equivalence {    public static void main(String[] args) {        Value n1 = new Value();        Value n2 = new Value();        n1.i = n2.i = 50;        System.out.println(n1.equals(n2));    }}输出结果是:true

窄化转换和扩展转换

窄化转换:将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,反之为扩展转换
java中对基本数据类型的操作默认是扩展转换,即在对基本数据类型做算术运算或按位运算时,都是默认转换成操作数总最大的那个类型

java中为什么没有sizeof()

在c和c++中sizeof()操作符可以告诉你为数据项分配的字节数,主要用于“移植”,因为不同数据类型在不同机器上可能有不同的大小,然而java不需要这个操作符来满足移植性,它的移植性已经被设计在语言中了

switch()和enum

switch被称为选中语句,参数只能为int或char那样的整数值,对于非整数,则必须使用一系列的if来进行选则,我们可以通过enum来减弱这种限制,因为enum和switch()可以协调工作
注:enum定义是构造函数最好是private的,因为枚举只是列举几个常量选项,并不需要你去修改它(个人理解)

enum MyEnum{    ZHANGSAN("10","zhansang"),LISI("20","lisi"),WANGWU("30","wangwu");    private MyEnum(String age , String name)    {        this.age = age ;        this.name = name;    }    private String age;    private String name;    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}public class Equivalence {    public static void useEnum(MyEnum enumType)    {        switch(enumType)        {            case LISI:                System.out.println("LISI的名字是:"+ enumType.getName());                return;            case WANGWU:                System.out.println("WANGWU的名字是:" + MyEnum.WANGWU.getName());                return;            default:                System.out.println("this is default");                return;        }    }    public static void main(String[] args) {        useEnum(MyEnum.LISI);        useEnum(MyEnum.WANGWU);//      运行 default 语句        useEnum(MyEnum.ZHANGSAN);    }}输出结果:LISI的名字是:lisiWANGWU的名字是:wangwuthis is default
0 0