Java-赚一笔-4

文章详细阐述了Java中==和equals方法的区别,尤其是对于对象和基本类型的不同处理。讨论了final关键字的用法,包括修饰变量、方法和类的效果。此外,介绍了基本类型和包装类型的差异,以及静态变量的作用。文章还涵盖了方法返回值类型、可变长参数、面向对象特性(封装、继承、多态)以及深拷贝和浅拷贝的概念。特别提到了String、StringBuffer和StringBuilder的使用场景及其性能考虑。
摘要由CSDN通过智能技术生成

1.== 和 equals 的区别是什么?

初始版本

==是直接判断两个对象的地址是否相同

equals

如果是引用类型 会调用两个对象的equals方法进行判断两个对象是否相同 默认的Object就是用==判断两个是不是相同的对象

补充版本

  1. 如果是基本类型 比较的就是值
  2. equals不能和基本类型比较

final关键字的作用

补充:

修饰引用

        1.如果是基本类型

                 

重写与重载

1.== 和 equals 的区别是什么?

==是直接判断两个对象的地址是否相同

equals 如果是引用类型 会调用两个对象的equals方法进行判断两个对象是否相同 默认的Object就是用==判断两个是不是相同的对象

  1. 如果是基本类型 比较的就是值
  2. equals不能和基本类型比较

final关键字的作用

修饰变量时

  1. 基本类型 表明该变量的内容不可变化
  2. 引用类型 /数组 表示该变量的指针地址不可变化 但是对象的具体内容 属性可以发生改变
  3. 修饰成员变量时 必须当场赋值

修饰方法时

  1. 表示该方法无法被子类重写 但是可以被继承

修饰类的时候

  1. 表示该类无法被继承 例如String

String 不属于基础的数据类型吗

基本类型和包装类型的区别?

  1. 用途:对于基本类型 我们一般在方法中使用 而包装类型更常见于JavaBean和方法参数中 参数传递:空和默认值是有区别的
  2. 存储方式:基本类型放在jvm的栈中 而包装类型在堆中
  3. 比较方式:参考1 equals

⚠️ 注意:基本数据类型存放在栈中是一个常见的误区! 基本数据类型的成员变量如果没有被 static 修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。

对于包装类型 使用equals

如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。

静态变量有什么作用?

静态变量被类的所有实例所共享 用于节省内存 可以用于创建常量池

什么是方法的返回值?方法有哪几种类型?

方法的返回值 是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用是接收出结果,使得它可以用于其他的操作!

我们可以按照方法的返回值和参数类型将方法分为下面这几种:

参数和返回值相互组合

静态方法为什么不能调用非静态成员?

静态方法时属于类的 在类加载的时候就会分配内存

而非静态方法是类的实例 需要创建实例后才能分配内存

可变长参数

遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?

答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。

面向对象

面向对象和面向过程

两者的区别主要在于解决方法的方式不用

面向过程讲所有问题抽成一个个过程

面向对象则是抽离出一个对象 而用对象调用方法解决问题

面向过程的性能一般比面向对象高 但并不是绝对的 由编程语言的运行机制来决定

面向对象三大特征

封装

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了

使用Javabean就是封装

继承

通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。

多态的特点:

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
  • 多态不能调用“只在子类存在但在父类不存在”的方法;
  • 如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法

补充

在Java8中 接口可以有默认实现 即关键字default

如果实现两个接口 同类型 都有一个相同的default 则实现类要重写这个方法

如果父类有相同类型 而子类又实现了default接口 优先使用父类的 即类优先于接口

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

关于深拷贝和浅拷贝区别,我这里先给结论:

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。

hashCode() 有什么用?

hashCode() 的作用是获取哈希码(int 整数),也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。

那为什么 JDK 还要同时提供这两个方法呢?

这是因为在一些容器(比如 HashMap、HashSet)中,有了 hashCode() 之后,判断元素是否在对应容器中的效率会更高(参考添加元素进HashSet的过程)!

我们在前面也提到了添加元素进HashSet的过程,如果 HashSet 在对比的时候,同样的 hashCode 有多个对象,它会继续使用 equals() 来判断是否真的相同。也就是说 hashCode 帮助我们大大缩小了查找成本。

那为什么不只提供 hashCode() 方法呢?

这是因为两个对象的hashCode 值相等并不代表两个对象就相等。

那为什么两个对象有相同的 hashCode 值,它们也不一定是相等的?

因为 hashCode() 所使用的哈希算法也许刚好会让多个对象传回相同的哈希值。越糟糕的哈希算法越容易碰撞,但这也与数据值域分布的特性有关(所谓哈希碰撞也就是指的是不同的对象得到相同的 hashCode )。

总结下来就是:

  • 如果两个对象的hashCode 值相等,那这两个对象不一定相等(哈希碰撞)。
  • 如果两个对象的hashCode 值相等并且equals()方法也返回 true,我们才认为这两个对象相等。
  • 如果两个对象的hashCode 值不相等,我们就可以直接认为这两个对象不相等。

String

String是常量

Stringbuffer是线程安全的 都用了 synchronized进行修饰

StringBuilder则是线程不安全的

性能 则是stringbuffer最快 但是却牺牲了线程不安全

String s1 = new String("abc");这句话创建了几个字符串对象?

会创建 1 或 2 个字符串对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值