`
itwangxinli
  • 浏览: 146124 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

转载:java基础

阅读更多

我有很多概念都没明白,现在反过头来认识。

Object是所有类的父类。
java.lang.String也是继承自java.lang.Object中。

先比较一下2个类的toString()、equals()、= = (很多面试题都有),再来说一下String 的特殊。

2个类toString()的比较:

class Test {
    
public static void
 main(String [] args) {
        Object obj 
= new
 Object();
        Dog d 
= new
 Dog();
        String s 
= new String("abc"
);
        
        System.out.println(
"obj = " +
 obj);    
        System.out.println(
"d = " +
 d);
        System.out.println(
"s = " +
 s);
    }
}

class
 Dog {}

结果:

obj 
=
 java.lang.Object@c17164
=
 Dog@1fb8ee3
=
 abc


查阅API文档:

Object类的 public String toString()   returns  
                    getClass().getName() 
+ '@' +
 Integer.toHexString(hashCode())
String类的  
public
 String toString()   returns  
                      the string itself.


说明String类重写了Object的toString方法。

2个类equals()、= =比较:

class Test {
    
public static void
 main(String [] args) {
        
        
//比较equals()和==

        Dog d1 = new Dog(1);
        Dog d2 
= new Dog(1
);
        
        System.out.println(
"d1 == d2 " + (d1 == d2)); //false

        System.out.println("d1.equals(d2) " + d1.equals(d2)); //false
        
        String s1 
= new String("abc"
);
        String s2 
= new String("abc"
);
        String s3 
= "abc"
;
        
        System.out.println(
"s1 == s2 " + (s1 == s2)); //false

        System.out.println("s1.equals(s2) " + s1.equals(s2)); //ture
        
        System.out.println(
"s1 == s3 " + (s1 == s3)); //false

        System.out.println("s1.equals(s3) " + s1.equals(s3)); //true
    }
}

class
 Dog {
    
private int
 i;
    Dog(){}
    Dog(
int
 i){
        
this.i =
 i;
    }
}

 

"=="是比较2个对象的引用是否指向同一个地址,如果是比较2个基本类型,那么就是比较2个值是否相等。
我new了2个Dog类,他们2个对象的栈引用肯定不能指向同一个堆地址。第二个String对象"=="的比较也是同样道理。所以都返回了false(第三个比较体现了String的特殊类,等下说明)。

查阅jdk的源代码:"equals"在Object中定义为

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

这就表示一个类如果没有重写该方法的话,它就是比较两个的引用是否指向了同一个地址(和"=="比较是一致的)。
类库里的类基本都重写的该方法,所以是比较2个对象的内容是否一样的(String方法重写了该方法,所以第二个equals比较返回ture),对于外面自己自定义的类,则需要自己重写该方法来达到内容是否相等的逻辑。


特殊对象String的equals()、= =比较

String s = newString("abc");和String s = "abc";
首先2个对象在内存分布上是不一样的。第2个对象是s的栈引用指向数据片段区的地址(存放字符串常量,静态成员变量)。第1个new出来的对象是s的栈引用指向堆中的地址(存放在堆中)。通过API文档:新创建的字符串对象s是该参数字符串("abc")的副本。

所以如代码所表示:"=="比较是不一样的,equals方法由于String重写了,比较是字符序列。

 

String s1 = "abc"    和  String s2 = "abc"比较;

"=="和equals方法都返回ture;
s1分配了字符常量"abc",那么再有"abc"要引用给对象,都不会再分配内存空间了。
所以s1 和s2 指向的空间相同,内容也相同。

分享到:
评论

相关推荐

    my1(java基础+页面设计)

    【标题】"my1(java基础+页面设计)"涵盖了两个主要的知识领域:Java基础和页面设计。这是一套学习资源,包括课件、实例、练习、答案以及开发工具的使用指南,旨在帮助初学者掌握Java编程语言的基础知识以及如何在实际...

    【转载】java实现的局域网聊天软件

    - **Socket编程**:Java中的Socket类和ServerSocket类是进行网络通信的基础,它们分别代表客户端和服务端的连接。Socket用于建立连接并进行数据传输,ServerSocket则监听特定端口,等待客户端的连接请求。 2. **多...

    java编程事项(转载收集整理版)

    理解类的定义、构造函数、封装、继承和多态是Java编程的基础。同时,接口也是Java中实现多态性的重要方式。 3. **异常处理**:Java的异常处理机制是通过try-catch-finally语句块来实现的。理解如何正确抛出和捕获...

    studytoshare:Java基础 ,一个纯新手的快速入门,言简意赅,来自一个自学者的提要。参考和部分转载[http

    ##Java基础学习记录资料分享 一个纯新手的快速入门,言简意赅,来自一个自学者的提要。参考和部分转载[] Java简介 图片[] 1.Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。 2.Java可运行于多个...

    java-course:Java初学者的必备课程,致力于快速掌握Java基础语法,理解面向对象思想,为逐步的深入学习打下基础!

    本课程是Java基础课程,有助于快速掌握Java基础语法,理解面向对象思想,为逐步的深入学习打下基础! 本课程是本人呕心沥血制作,转载时请申明。 本课程有部分外部资源必须有外网才能访问。 致谢: 本课程在写作之时...

    转载-Java语言入门教程

    Java语言入门教程旨在帮助初学者掌握编程基础知识,特别是针对Java编程。这个教程假设读者对编程没有预先的知识,但需要有一定的计算机操作基础,例如文件管理。此外,教程特别指出,无论年龄大小,只要有学习的愿望...

    java7源码-ReviewJavaFoundation:重温Java基础系列源代码

    谨以此系列文章,来记录重温Java基础的历程。 为啥费劲写这些文章?和写SpringCloud进阶之路时一样,一是为了巩固自己所学的知识,写下来,远比搞清楚要复杂的多!二是为了写出来,避免大家踩同样的坑,与大家共同...

    JSP简明教程:JSP基础(转载)

    **JSP简介** JavaServer Pages (JSP) 是一种基于Java技术的动态网页开发标准,它使得开发人员能够轻松地创建包含动态内容的HTML页面。...了解并熟练掌握JSP的基础和特性,对于Web开发人员来说是至关重要的。

    Java工程师新人入门书籍推荐

    - 《Java 核心编程》(Core Java):分为上下两卷,上卷深入讲解Java基础知识,下卷则涉及更实践性的内容,如XML、网络、数据库等。此书对于C++背景的开发者尤其有用,可以帮助理解Java的特性。 2. **进一步提升**...

    JAVA数据库连接大全-转载

    这篇博客"JAVA数据库连接大全-转载"可能详细介绍了在Java中如何管理和使用数据库连接,包括使用JDBC API,数据库连接池以及相关的工具。这里我们将深入探讨JDBC、数据库连接池的重要性和配置方法。 1. **JDBC基础**...

    《Java 程序设计》模拟试题(转载).docx

    Java是一种广泛使用的面向对象...这些知识点构成了Java程序设计的基础,包括编程语法、类和对象、数据类型、运算符、流程控制以及Java特有的特性,如Applet和字节码执行。理解和掌握这些内容对于学习Java编程至关重要。

    JavaInterview:Java知识点汇总

    待补充网络通信协议(网络知识相对薄弱,后期补充) Java基础反射JUC多线程及高并发JVM虚拟机MySQL数据库NoSql数据库雷迪斯MQ消息中间件Linux基本命令吉特前世今生GitHub小拓展框架相关第三方API使用

    (转载)文思创新 java开发工程师笔试题.doc

    这些题目涵盖了Java编程的基础知识,包括循环控制、线程启动、访问控制和内部类。对于Java开发工程师来说,理解这些概念是非常重要的,它们是编写高效、健壮代码的基础。在面试或笔试中,掌握这些知识将有助于展示...

    JavaCore:Java程序员所需要掌握的核心知识

    微信公众号目录算法Java虚拟机春天SpringMVC高并发架构基石-缓存网络篇架构其他主意书单《 Java编程思想(第4版)》-Java领域的圣经,建议稍微有点基础后阅读。不推荐初学者阅读,小心被劝退《深入理解Java虚拟机》-...

    Java 最常见 200+ 面试题全解析:面试必备.pdf

    1. Java基础:涵盖Java基本语法,数据类型,类和对象,继承,接口,异常处理等核心概念。 2. 容器:包括List、Set、Map等接口的实现类和特点,例如ArrayList、LinkedList、HashMap、TreeMap等,并探讨它们的性能、...

    Java编程基础

    Th is book on Java programming teaches object-oriented design and programming principles in a completely integrated and incremental fashion. Th is book allows the reader to experience the world we ...

    [转载] Java知识体系最强总结(2020版).md

    java知识体系最强总结版为 转载java知识体系总结,从基础知识到后台开发、大数据等等方面进行全方位解读java,利于学习和求职面试

    java8源码-JavaInterview:Java面试

    基础 容器(包括juc) 并发 JVM Java8 计算机网络 计算机操作系统 Linux 数据结构与算法 数据结构 算法 数据库 MySQL mysql(优化思路) 系统设计 秒杀系统相关 前后端分离 单点登录 常用框架 Spring SpringBoot ...

    2008十大优秀Java应用程序(转载)

    【标题】: "2008十大优秀Java应用程序(转载)" 这些优秀的Java应用程序展示了Java在不同领域的广泛应用和强大性能。以下是对各个程序的详细解释: 10. **无线传感器开发环境Sun SPOT** - Sun SPOT是一个创新的...

    java源码编辑-drools:Drools是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。Drools允许使用声

    Java基础 JVM虚拟机 Spring源码 Netty4.x专题 领域驱动设计 中间件开发 JavaAgent 架构框架搭建 :hot_beverage: Java基础编程 :laptop: 用Java实现jvm虚拟机 :pencil: Spring系列源码解读 :speaker_medium_volume: ...

Global site tag (gtag.js) - Google Analytics