一、 instanceof

instanceOf是Java的一个二元操作符,和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。相当于c#中的is操作符。

举个例子:

  String s = "I AM an Object!";
boolean isObject = s instanceOf Object; 

  我们声明了一个String对象引用,指向一个String对象,然后用instanceOf来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为true。

  instanceOf有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

  public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节} 

  在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceOf来判断:

  public double calculate(Bill bill) {
if (bill instanceOf PhoneBill) {
//计算电话账单
}
if (bill instanceOf GasBill) {
//计算燃气账单
}
...
} 

  这样就可以用一个方法处理两种子类。

  然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象编程应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

  public double calculate(PhoneBill bill) {
//计算电话账单
}
public double calculate(GasBill bill) {
//计算燃气账单
} 

  所以,使用instanceOf在绝大多数情况下并不是推荐的做法,应当好好利用多态。

  instanceOf 一般情况下 用在对象类型的强制转换 ,

  例如:

  继承关系 class Manager extends Employee

  ----------------------------------------------------------

  public void doSomething(Employee e) {
if ( e instanceOf Manager){
Manager m = (Manager) e ;
}
} 

 网络释义

  1. 运算符 返回一个 Boolean 值,表明某个对象是否为特定类的一个实例。...instanceOf 运算符...返回一个 Boolean 值,表明某个给定的数是否是有穷的。

  2. 和回调概念 instanceOf和回调概念...instanceOf和回调概念...

  3. 动态的

  4. 操作符

  -----------------------------------------------------------

二、Arrays 的copyOf() - JDK 6

在 进阶的数组观念 中,我们谈到了数组复制,您可以使用System.arraycopy()方法来进行数组复制:

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);

这个方式必须明确自行新建立一个数组对象。在JDK 6中,Arrays 类别 新增了copyOf()方法,可以直接传回一个新的数组对象,而当中包括复制的内容,例如:

ArrayDemo.java
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");
System.out.println();
}
} 

执行结果:

1 2 3 4 5

Arrays的copyOf()方法传回的数组是新的数组对象,所以您改变传回数组中的元素值,也不会影响原来的数组。

copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,例如:

ArrayDemo.java
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 10);
for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");
System.out.println();
}
} 

执行结果:

1 2 3 4 5 0 0 0 0 0

Arrays 的copyOf() - JDK 6 和操作符 instanceof相关推荐

  1. arrays中copyof复制两个数组_数组,及二维数组

    1.1 命令行参数(C) 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数. public 命令行参数以字符串的形式传入args数组中.可以一次传递0-多个参数,以空格分割. 如果 ...

  2. arrays中copyof复制两个数组_数据结构与算法(3)数组

    前言 数组(Array)是一种线性表数据结构,利用一组连续的内存空间,存储一组具有相同类型的数据. 概念介绍 首先我们说一下什么是线性表,线性表就是数据排成一条线的数据结构,每个线性表最多只有前和后两 ...

  3. arrays中copyof复制两个数组_Java的数组初识和拷贝用法

    方法重载:方法名称相同,参数列表不同. 不能有两个名字相同.参数类型相同,返回值不同的方法. 在进行方法重载时,方法的返回值一定相同!!! 方法递归特点: 1.必须有结束条件 2.每次递归处理时,一定 ...

  4. arrays中copyof复制两个数组_Core Java - Arrays

    int 要找出一个array有多少个elements,使用array.length. array一旦被创建之后,无法更改它的大小(size).如果需要动态增加一个数组的大小,可以使用array lis ...

  5. arrays中copyof复制两个数组_Java教程分享之数组知识梳理

    Java是一门面向对象编程语言,具有简单易用.功能强大的特征.数组是同类型数据的有序集合,在Java中是引用数据类型,引用数据类型值都存储在堆中.有很多新手初学Java数组觉得难度大,接下来就给大家简 ...

  6. 详解Java操作符 instanceof

    1.简述 "instanceof" (1)instanceof 是什么? instanceof 是 Java 运算符中的一个二元操作符,类似于 ==,>,< 等. 同时 ...

  7. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」

    今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...

  8. arrays中copyof复制两个数组_Python数组切片中的复制与否问题-list篇

    说到Python中数组的切片操作,稍有了解的想必都不陌生.以Python的内置数据类型list(列表)为例, L = [5, 2, 0, 1, 3, 1, 4] L1 = L[3:7] 我们称L[3: ...

  9. arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

最新文章

  1. Math.ceil(),Math.floor()与Math.round()三个函数的定义。
  2. mysql @@version_MySQL数据库安装Version5.5
  3. java中正则表达式并集_对Java中正则表达式的一些理解
  4. mysql between 查询不出来_mysql的语句优化
  5. 信息学奥赛一本通(1183:病人排队)
  6. java sftp 密钥_通过密钥 SFTP (二):启用没有 Shell 访问权限的 SFTP 账户
  7. 苹果蜂窝网络版iPad mini 6不支持毫米波5G
  8. excel pandas 空格_pandas 实现 Excel 常见操作 (1)
  9. 广域网协议之PPP,HDLC
  10. 在一台2010年的老电脑上安装黑群辉dsm5.2并完成外网访问与洗白操作
  11. html设置字体为方正小标宋,如何安装方正小标宋字体
  12. Java集合框架--学习目标 集合概念 Collection体系集合 Collection接口
  13. ubuntu 下的限速软件 wondershaper 以及 命令行测试网速
  14. GitHub上的项目受美国出口管制吗?
  15. cad.net 利用win32api实现一个命令开关参照面板
  16. 线性回归的补充与变量归一化
  17. Web Of Science检索页面错误信息修改申请方法
  18. 【UE5 C++基础 05】UBT基础
  19. 微型计算机ram通常是指,微型计算机内存容量的大小一般是指什么而言
  20. Spring定时器之翘楚-Quartz

热门文章

  1. 基于内容的自适应视频传输算法及其应用
  2. 音视频技术开发周刊 81期
  3. LiveVideoStackCon讲师热身分享 ( 十四 ) —— HEVC标准在客户端上的快速实现方法的研究...
  4. mac下RTSP服务器搭建(ZLMediaKit)
  5. 《视频直播技术详解》之(四):编码和封装
  6. 互斥锁属性PTHREAD_MUTEX_RECURSIVE
  7. VMware与KVM全方面对比
  8. Why docker command need sudo? | 为什么运行docker命令需要sudo?
  9. 在java中使用JMH(Java Microbenchmark Harness)做性能测试
  10. each 数据获取attr_我背着CSDN偷偷记录了大半年我博客数据