课程咨询 :136-6976-6643

长沙Java培训 > 达内新闻 > java语言:OOP面向对象程序编程
  • java语言:OOP面向对象程序编程

    发布:长沙web培训      来源:博客园      时间:2016-11-23

  • 长沙Java培训机构的老师知道,OOP(Object-oriented Programming)面向对象程序编程

    初谈类和对象,所谓万物皆对象,类和对象有什么区别和联系?

    类,是对某一种类型的定义,比如字符串,动物,人,飞机等等,而对象是指具体的字符串,动物,人...

    如:猪是类,定义了,猪,有体重,有年龄,可以吃饭,可以睡觉,而对象是这只猪,那只猪,或者某只猪起个名字,叫小白,那么这种具体的猪,就是对象,而小白这个名字,则称为对象的引用,因为通过小白,我们可以找到指定的那头猪。

    package com.yq;

    public class Pig {

    private int height;

    private int age;

    void eat() {

    System.out.println("eat()");

    }

    void sleep() {

    System.out.println("sleep()");

    }

    public String toString() {

    return getClass().getName() + "===@===" + Integer.toHexString(hashCode());

    }

    //   public String toString() {

    //       return getClass().getName() + "@" + Integer.toHexString(hashCode());

    //   }

    public static void main(String[] args) {

    Pig xiaoBai = new Pig();

    Pig xiaoHei = new Pig();

    xiaoBai.eat();

    xiaoHei.sleep();

    System.out.println(xiaoBai);

    System.out.println(xiaoHei);

    System.out.println("xiaoBai==xiaoHei?" + (xiaoBai == xiaoHei));

    System.out.println(xiaoBai.getClass());

    System.out.println(xiaoHei.getClass());

    System.out.println("xiaoBai.getClass()==xiaoHei.getClass()?" + (xiaoBai.getClass() == xiaoHei.getClass()));

    }

    }

    eat()

    sleep()

    com.yq.Pig===@===74a14482

    com.yq.Pig===@===1540e19d

    xiaoBai==xiaoHei?false

    class com.yq.Pig

    class com.yq.Pig

    xiaoBai.getClass()==xiaoHei.getClass()?true

    关于'=='

    对于引用变量而言,比较的时候两个引用变量引用的是不是同一个对象,即比较的是两个引用中存储的对象地址是不是一样的。

    对于基本数据类型而言,比较的就是两个数据是不是相等。

    对于String类型,它是特殊而有趣的。

    package com.yq;

    public class Test {

    public static void main(String[] args) {

    //String作为一个对象来使用

    System.out.println("String作为一个对象来使用");

    String str = new String("hello");

    String str2 = "he" + new String("llo");

    System.out.println("str==str2?" + (str == str2));

    System.out.println(str + "@" + str.hashCode());

    System.out.println(str2 + "@" + str2.hashCode());

    //String作为一个基本类型来使用

    //如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

    //如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

    System.out.println("String作为一个基本类型来使用");

    String s1 = "java";

    String s2 = "java";

    System.out.println("s1==s2?" + (s1 == s2));

    System.out.println(s1 + "@" + s1.hashCode());

    System.out.println(s2 + "@" + s2.hashCode());

    System.out.println("String混合使用");

    String st1 = "hello java";

    String st2 = new String("hello java");

    System.out.println("st1==s2?" + (st1 == st2));

    System.out.println(st1 + "@" + st1.hashCode());

    System.out.println(st2 + "@" + st2.hashCode());

    }

    }

    String作为一个对象来使用

    str==str2?false

    hello@99162322

    hello@99162322

    String作为一个基本类型来使用

    s1==s2?true

    java@3254818

    java@3254818

    String混合使用

    st1==s2?false

    hello java@-1605094224

    hello java@-1605094224

    输出结果中,明明hashCode相等,为何对象不相同?

    public int hashCode() {

    int h = hash;

    if (h == 0 && value.length > 0) {

    char val[] = value;

    for (int i = 0; i < value.length; i++) {

    h = 31 * h + val[i];

    }

    hash = h;

    }

    return h;

    }

    上述String源码中,可以看出,String类是使用它的value值作为参数然后进行运算得出hashcode的,

    换句话说,只要值相同的String不管是不是一个对象,hash值全部相等。

    在Object超类中,hashCode()是一个native本地方法,看不到实现。

    对象存放在内存的堆中,而基本类型则存放在内存的栈中。

    推荐文章

上一篇:java嵌套类:内部类

下一篇:java语言:操作符

最新开班日期  |  更多

Java--大数据业余制班

Java--大数据业余制班

开班日期:3月31日

Java--大数据全日制班

Java--大数据全日制班

开班日期:3月31日

Java--零基础业余班

Java--零基础业余班

开班日期:3月31日

Java--零基础全日制班

Java--零基础全日制班

开班日期:3月31日

  • 网址:http://cs.java.tedu.cn     地址:长沙市雨花区芙蓉中路二段359号佳天国际新城北栋28楼
  • 课程培训电话:136-6976-6643     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56