- java.lang.Object
-
- java.awt.image.SampleModel
-
- java.awt.image.ComponentSampleModel
-
- 已知直接子类:
-
BandedSampleModel
,PixelInterleavedSampleModel
public class ComponentSampleModel extends SampleModel
该类表示存储的图像数据,使得像素的每个样本占据DataBuffer的一个数据元素。 它将组成一个像素的N个样本存储在N个单独的数据数组元素中。 不同的频段可能位于DataBuffer的不同行。 提供访问方法,以便可以直接操纵图像数据。 该类可以支持不同种类的交织,例如频带交织,扫描线交织和像素交错。 像素幅度是同一扫描线上同一频带的两个样本之间的数据数组元素数。 扫描线步幅是给定样本与下一个扫描线同一列中相应样本之间的数据数组元素数。 带偏移表示来自保持每个频带的DataBuffer组的第一数据阵列元素到该频带的第一个样本的数据数组元素的数量。 频带从0到N-1编号。 这个类可以代表图像数据,其中每个样本是(使用可被存储在8位,16位或32位的无符号整数DataBuffer.TYPE_BYTE
,DataBuffer.TYPE_USHORT
,或DataBuffer.TYPE_INT
,分别地),数据为每个样本是一个带符号的整数,其可以存储在16位(使用DataBuffer.TYPE_SHORT
)或每个样本是带符号的浮点数或双倍数量的数据(分别为DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
)。 给定ComponentSampleModel的所有样本以相同的精度存储。 所有步幅和偏移量必须为非负值。 该类支持TYPE_BYTE
,TYPE_USHORT
,TYPE_SHORT
,TYPE_INT
,TYPE_FLOAT
,TYPE_DOUBLE
,
-
-
Field Summary
Fields Modifier and Type Field 描述 protected int[]
bandOffsets
数据数组元素中所有频带的偏移量。protected int[]
bankIndices
每个存储一个图像数据带的存储体的索引。protected int
numBands
这个数字在ComponentSampleModel
。protected int
numBanks
这个银行的数量在这ComponentSampleModel
。protected int
pixelStride
由该ComponentSampleModel描述的图像数据区域的像素(在数据数组元素中)。protected int
scanlineStride
由该ComponentSampleModel描述的图像数据区域的线条(在数据数组元素中)。-
Fields inherited from class java.awt.image.SampleModel
dataType, height, width
-
-
构造方法摘要
构造方法 Constructor 描述 ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets)
使用指定的参数构造一个ComponentSampleModel。ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)
使用指定的参数构造一个ComponentSampleModel。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 SampleModel
createCompatibleSampleModel(int w, int h)
创建一个新的ComponentSampleModel
具有指定的宽度和高度。DataBuffer
createDataBuffer()
创建一个DataBuffer
对应于这个ComponentSampleModel
。SampleModel
createSubsetSampleModel(int[] bands)
使用此ComponentSampleModel的带子集创建新的ComponentSampleModel。boolean
equals(Object o)
指示一些其他对象是否等于此。int[]
getBandOffsets()
返回所有频段的频偏。int[]
getBankIndices()
返回所有频段的银行指数。Object
getDataElements(int x, int y, Object obj, DataBuffer data)
返回类型为TransferType
的基本数组中单个像素的数据。int
getNumDataElements()
int
getOffset(int x, int y)
获取像素(x,y)的第一个带的偏移量。int
getOffset(int x, int y, int b)
获取像素(x,y)的带b的偏移。int[]
getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int数组中指定像素的所有样本,每个数组元素一个样本。int[]
getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的所有样本,每个数组元素一个样本。int
getPixelStride()
返回此ComponentSampleModel的像素步幅。int
getSample(int x, int y, int b, DataBuffer data)
返回为位于(x,y)处的像素的指定带中的样本int。double
getSampleDouble(int x, int y, int b, DataBuffer data)
将位于(x,y)的像素的指定带中的样本返回为双倍。float
getSampleFloat(int x, int y, int b, DataBuffer data)
将位于(x,y)处的像素的指定带中的样本作为浮点返回。int[]
getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的指定带中的样本,每个数据数组元素一个样本。int[]
getSampleSize()
返回所有频带的每个样本的位数。int
getSampleSize(int band)
返回指定频带的每个样本的位数。int
getScanlineStride()
返回此ComponentSampleModel的扫描线步幅。int
hashCode()
返回对象的哈希码值。void
setDataElements(int x, int y, Object obj, DataBuffer data)
设置在指定的一个单个像素的数据DataBuffer
从类型的基本数组TransferType
。void
setPixel(int x, int y, int[] iArray, DataBuffer data)
在DataBuffer
使用int数组的样本设置输入的像素。void
setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
从包含每个数组元素一个样本的int数组中设置一个像素矩形的所有样本。void
setSample(int x, int y, int b, double s, DataBuffer data)
在DataBuffer
中的位置(x,y)处的像素的指定频带中设置一个采样,使用双倍输入。void
setSample(int x, int y, int b, float s, DataBuffer data)
在DataBuffer
使用浮点数为输入设置位于(x,y)处的像素的指定带中的样本。void
setSample(int x, int y, int b, int s, DataBuffer data)
在DataBuffer
使用int输入,为位于(x,y)处的像素的指定波段设置一个样本。void
setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数据数组元素一个样本的int数组中为指定的像素矩形设置样本。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.awt.image.SampleModel
getDataElements, getDataType, getHeight, getNumBands, getPixel, getPixel, getPixels, getPixels, getSamples, getSamples, getTransferType, getWidth, setDataElements, setPixel, setPixel, setPixels, setPixels, setSamples, setSamples
-
-
-
-
字段详细信息
-
bandOffsets
protected int[] bandOffsets
数据数组元素中所有频带的偏移量。
-
bankIndices
protected int[] bankIndices
每个存储一个图像数据带的存储体的索引。
-
numBands
protected int numBands
这个ComponentSampleModel
的乐队数。
-
numBanks
protected int numBanks
这个银行的数量在这ComponentSampleModel
。
-
scanlineStride
protected int scanlineStride
由该ComponentSampleModel描述的图像数据区域的线条(在数据数组元素中)。
-
pixelStride
protected int pixelStride
由该ComponentSampleModel描述的图像数据区域的像素(在数据数组元素中)。
-
-
构造方法详细信息
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bandOffsets)
使用指定的参数构造一个ComponentSampleModel。 带宽的数量将由bandOffsets数组的长度给出。 所有频段将被存储在DataBuffer的第一个存储区中。- 参数
-
dataType
- 存储样本的数据类型 -
w
- 描述的图像数据区域的宽度(以像素为单位) -
h
- 描述的图像数据区域的高度(以像素为单位) -
pixelStride
- 所描述的图像数据区域的像素步幅 -
scanlineStride
- 描述图像数据区域的行scanlineStride
-
bandOffsets
- 所有频带的偏移量 - 异常
-
IllegalArgumentException
- 如果w
或h
不大于0 -
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
IllegalArgumentException
- 如果numBands
小于1 -
IllegalArgumentException
- 如果w
和h
的产品大于Integer.MAX_VALUE
-
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
ComponentSampleModel
public ComponentSampleModel(int dataType, int w, int h, int pixelStride, int scanlineStride, int[] bankIndices, int[] bandOffsets)
使用指定的参数构造一个ComponentSampleModel。 带宽的数量将由bandOffsets数组的长度给出。 不同的频段可能存储在DataBuffer的不同组中。- 参数
-
dataType
- 存储样本的数据类型 -
w
- 描述的图像数据区域的宽度(以像素为单位) -
h
- 描述的图像数据区域的高度(以像素为单位) -
pixelStride
- 描述的图像数据区域的像素步幅 -
scanlineStride
- 描述图像数据区域的行走 -
bankIndices
- 所有乐队的银行指数 -
bandOffsets
- 所有频带的频带偏移 - 异常
-
IllegalArgumentException
- 如果w
或h
不大于0 -
IllegalArgumentException
- 如果pixelStride
小于0 -
IllegalArgumentException
- 如果scanlineStride
小于0 -
IllegalArgumentException
-如果长度bankIndices
不等于的长度bankOffsets
-
IllegalArgumentException
-如有的银行指数bandIndices
小于0 -
IllegalArgumentException
- 如果dataType
不是支持的数据类型之一
-
-
方法详细信息
-
createCompatibleSampleModel
public SampleModel createCompatibleSampleModel(int w, int h)
创建一个新的ComponentSampleModel
具有指定的宽度和高度。 新SampleModel
将具有相同数目的频带,存储数据类型的交织方案,以及像素跨度,因为这SampleModel
。- Specified by:
-
createCompatibleSampleModel
在SampleModel
- 参数
-
w
- 所得的宽度SampleModel
-
h
- 由此产生的高度SampleModel
- 结果
-
一个新的
ComponentSampleModel
具有指定的大小 - 异常
-
IllegalArgumentException
- 如果w
或h
不大于0
-
createSubsetSampleModel
public SampleModel createSubsetSampleModel(int[] bands)
使用此ComponentSampleModel的带子集创建新的ComponentSampleModel。 新的ComponentSampleModel可以与现有的ComponentSampleModel可以一起使用的任何DataBuffer使用。 新的ComponentSampleModel / DataBuffer组合将表示具有原始ComponentSampleModel / DataBuffer组合的带子集的图像。- Specified by:
-
createSubsetSampleModel
在SampleModel
- 参数
-
bands
- 这个ComponentSampleModel
一个子集 - 结果
-
一个
ComponentSampleModel
创建了一个子带从这ComponentSampleModel
。
-
createDataBuffer
public DataBuffer createDataBuffer()
创建一个DataBuffer
对应于这个ComponentSampleModel
。DataBuffer
对象的数据类型,银行数量和大小与此ComponentSampleModel
一致。- Specified by:
-
createDataBuffer
在SampleModel
- 结果
-
一个
DataBuffer
的数据类型,银行数量和大小与此ComponentSampleModel
一致。
-
getOffset
public int getOffset(int x, int y)
获取像素(x,y)的第一个带的偏移量。 第一个乐队的样本可以从DataBuffer
data
,其中ComponentSampleModel
csm
为data.getElem(csm.getOffset(x, y));
- 参数
-
x
- 像素的X位置 -
y
- 像素的Y位置 - 结果
- 指定像素的第一个带的偏移量。
-
getOffset
public int getOffset(int x, int y, int b)
获取像素(x,y)的带b的偏移。 带的样品b
可以从被检索DataBuffer data
与ComponentSampleModel csm
作为data.getElem(csm.getOffset(x, y, b));
- 参数
-
x
- 指定像素的X位置 -
y
- 指定像素的Y位置 -
b
- 指定的乐队 - 结果
- 指定像素的指定波段的偏移量。
-
getSampleSize
public final int[] getSampleSize()
返回所有频带的每个样本的位数。- Specified by:
-
getSampleSize
在SampleModel
- 结果
- 一个数组,其中包含所有带的每个样本的位数,其中阵列中的每个元素表示一个带。
-
getSampleSize
public final int getSampleSize(int band)
返回指定频带的每个样本的位数。- Specified by:
-
getSampleSize
在SampleModel
- 参数
-
band
- 指定的乐队 - 结果
- 指定频带的每个样本的位数。
-
getBankIndices
public final int[] getBankIndices()
返回所有频段的银行指数。- 结果
- 所有乐队的银行指数。
-
getBandOffsets
public final int[] getBandOffsets()
返回所有频段的频偏。- 结果
- 所有频带的频带偏移量。
-
getScanlineStride
public final int getScanlineStride()
返回此ComponentSampleModel的扫描线步幅。- 结果
-
该扫描线步幅为
ComponentSampleModel
。
-
getPixelStride
public final int getPixelStride()
返回此ComponentSampleModel的像素步幅。- 结果
-
这个像素步幅这个
ComponentSampleModel
。
-
getNumDataElements
public final int getNumDataElements()
返回使用getDataElements(int, int, Object, DataBuffer)
和setDataElements(int, int, Object, DataBuffer)
方法传输像素所需的数据元素数。 对于ComponentSampleModel
,这与频带数相同。- Specified by:
-
getNumDataElements
在SampleModel
- 结果
-
使用
getDataElements
和setDataElements
方法传输像素所需的数据元素数量。 - 另请参见:
-
SampleModel.getNumDataElements()
,SampleModel.getNumBands()
-
getDataElements
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
返回类型为TransferType
的基本数组中的单个像素的数据。 对于ComponentSampleModel
,这与数据类型相同,每个数组元素返回一个样本。 通常,obj
应传递作为null
,使得Object
被自动创建,并且是右原始数据类型。以下代码说明了将
DataBuffer db1
的存储布局由ComponentSampleModel csm1
描述的ComponentSampleModel csm1
一个像素的数据传输到DataBuffer db2
,其存储布局由ComponentSampleModel csm2
描述。 转移通常比使用getPixel
和setPixel
更有效。ComponentSampleModel csm1, csm2; DataBufferInt db1, db2; csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1), db2);
使用getDataElements
和setDataElements
在两个DataBuffer/SampleModel
对之间传输是合法的,如果SampleModel
对象具有相同数量的频带,则相应频带具有与每个样本相同的位数,并且TransferType
是相同的。如果
obj
不是null
,它应该是一个类型为TransferType
的原始数组。 否则,抛出一个ClassCastException
。 一个ArrayIndexOutOfBoundsException
如果坐标不在边界可能被抛出,或者如果obj
不null
并没有大到足以容纳像素数据。- Specified by:
-
getDataElements
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 如果非null
,其中返回像素数据的原始数组 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素的数据
- 异常
-
NullPointerException
- 如果数据为空。 -
ArrayIndexOutOfBoundsException
- 如果坐标不是边界,或者obj太小,不能容纳输出。 - 另请参见:
-
setDataElements(int, int, Object, DataBuffer)
-
getPixel
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
返回int数组中指定像素的所有样本,每个数组元素一个样本。 如果坐标不在边界内,可能会抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getPixel
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- 如果非空,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定像素的样本。
- 异常
-
NullPointerException
- 如果数据为空。 -
ArrayIndexOutOfBoundsException
- 如果坐标不在边界,或者如果iArray太小,不能容纳输出。 - 另请参见:
-
setPixel(int, int, int[], DataBuffer)
-
getPixels
public int[] getPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的所有样本,每个数组元素一个样本。 如果坐标不在边界内,可能会抛出一个ArrayIndexOutOfBoundsException
。- 重写:
-
getPixels
在SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- 如果非空,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer - 结果
- 指定区域内像素的样本。
- 另请参见:
-
setPixels(int, int, int, int, int[], DataBuffer)
-
getSample
public int getSample(int x, int y, int b, DataBuffer data)
返回为位于(x,y)处的像素的指定带中的样本int。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- Specified by:
-
getSample
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素的指定频带中的样本
- 另请参见:
-
setSample(int, int, int, int, DataBuffer)
-
getSampleFloat
public float getSampleFloat(int x, int y, int b, DataBuffer data)
将位于(x,y)处的像素的指定带中的样本作为浮点返回。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSampleFloat
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 表示指定像素的指定频带中的样本的浮点值。
-
getSampleDouble
public double getSampleDouble(int x, int y, int b, DataBuffer data)
将位于(x,y)的像素的指定带中的样本返回为双倍。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSampleDouble
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队返回 -
data
- 包含图像数据的DataBuffer - 结果
- 表示指定像素的指定频带中的样本的双重值。
-
getSamples
public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
返回int数组中指定的像素矩形的指定带中的样本,每个数据数组元素一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
getSamples
在SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 乐队返回 -
iArray
- 如果非null
,则返回此数组中的样本 -
data
- 包含图像数据的DataBuffer
- 结果
- 指定像素的指定带中的样本
- 另请参见:
-
setSamples(int, int, int, int, int, int[], DataBuffer)
-
setDataElements
public void setDataElements(int x, int y, Object obj, DataBuffer data)
设置在指定的一个单个像素的数据DataBuffer
从类型的基本数组TransferType
。 对于ComponentSampleModel
,这与数据类型相同,每个数组元素都会传送一个样本。以下代码说明将
DataBuffer db1
的存储布局由ComponentSampleModel csm1
描述的ComponentSampleModel csm1
一个像素的数据传输到DataBuffer db2
,其存储布局由ComponentSampleModel csm2
描述。 转移通常比使用getPixel
和setPixel
更有效。ComponentSampleModel csm1, csm2; DataBufferInt db1, db2; csm2.setDataElements(x, y, csm1.getDataElements(x, y, null, db1), db2);
如果SampleModel
对象具有相同数量的频带,则使用getDataElements
和setDataElements
在两个DataBuffer/SampleModel
对之间传输是合法的,对应的频带具有与每个采样相同的位数,而TransferType
是相同的。甲
ClassCastException
如果被抛出obj
不是类型的基本数组TransferType
。 一个ArrayIndexOutOfBoundsException
如果坐标不在边界可能被抛出,或者如果obj
不够大,无法容纳像素数据。- Specified by:
-
setDataElements
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
obj
- 包含像素数据的原始数组 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getDataElements(int, int, Object, DataBuffer)
-
setPixel
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
在DataBuffer
使用int数组的样本设置一个像素进行输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setPixel
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getPixel(int, int, int[], DataBuffer)
-
setPixels
public void setPixels(int x, int y, int w, int h, int[] iArray, DataBuffer data)
从包含每个数组元素一个样本的int数组中设置一个像素矩形的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setPixels
在SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getPixels(int, int, int, int, int[], DataBuffer)
-
setSample
public void setSample(int x, int y, int b, int s, DataBuffer data)
在DataBuffer
使用int作为输入,为位于(x,y)处的像素的指定频带设置一个样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- Specified by:
-
setSample
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队设置 -
s
- 输入样本为int -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, float s, DataBuffer data)
为DataBuffer
位于(x,y)处的像素的指定波段设置采样,使用浮点输入。 如果坐标不在边界内,可能会抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSample
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队设置 -
s
- 输入样本为浮点数 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSample
public void setSample(int x, int y, int b, double s, DataBuffer data)
为DataBuffer
位于(x,y)处的像素的指定波段设置一个样本,使用双倍输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSample
在SampleModel
- 参数
-
x
- 像素位置的X坐标 -
y
- 像素位置的Y坐标 -
b
- 乐队设置 -
s
- 输入样本为双倍 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSample(int, int, int, DataBuffer)
-
setSamples
public void setSamples(int x, int y, int w, int h, int b, int[] iArray, DataBuffer data)
从包含每个数据数组元素一个样本的int数组中为指定的像素矩形设置样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException
。- 重写:
-
setSamples
在SampleModel
- 参数
-
x
- 左上角像素位置的X坐标 -
y
- 左上角像素位置的Y坐标 -
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
b
- 乐队设置 -
iArray
- int数组中的输入样本 -
data
- 包含图像数据的DataBuffer - 另请参见:
-
getSamples(int, int, int, int, int, int[], DataBuffer)
-
equals
public boolean equals(Object o)
描述从类复制:Object
指示一些其他对象是否等于此。equals
方法在非空对象引用上实现等价关系:- 自反性 :对于任何非空的参考值
x
,x.equals(x)
应该返回true
。 - 它是对称的 :对于任何非空引用值
x
和y
,x.equals(y)
应该返回true
当且仅当y.equals(x)
回报true
。 - 传递性 :对于任何非空引用值
x
,y
,并z
,如果x.equals(y)
回报true
和y.equals(z)
回报true
,然后x.equals(z)
应该返回true
。 - 一致 :对于任何非空参考值
x
和y
,多重调用x.equals(y)
一致返回true
或始终返回false
,前提是在equals
对象中使用的信息进行修改。 - 对于任何非空的参考值
x
,x.equals(null)
应该返回false
。
该
equals
类方法Object
实现对象上差别可能性最大的相等关系; 也就是说,对于任何非空参考值x
和y
,当且仅当x
和y
引用相同对象(x == y
具有值true
)时,该方法返回true
。请注意,无论何时覆盖此方法,通常需要覆盖
hashCode
方法,以便维护hashCode
方法的通用合同,该方法规定相等的对象必须具有相等的哈希码。- 重写:
-
equals
在Object
- 参数
-
o
- 与之比较的参考对象。 - 结果
-
true
如果该对象与obj参数相同; 否则为false
。 - 另请参见:
-
Object.hashCode()
,HashMap
- 自反性 :对于任何非空的参考值
-
hashCode
public int hashCode()
描述从类复制:Object
返回对象的哈希码值。 支持这种方法有利于哈希表,如HashMap
提供的那样 。hashCode
的总合同是:- 只要在执行Java应用程序时多次在同一个对象上调用该对象,则
hashCode
方法必须始终返回相同的整数,前提是修改了对象中equals
比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。 - 如果根据
equals(Object)
方法两个对象相等,则在两个对象中的每个对象上调用hashCode
方法必须产生相同的整数结果。 - 不要求如果两个对象根据
Object.equals(java.lang.Object)
方法是不相等的,那么在两个对象中的每个对象上调用hashCode
方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。
尽可能合理实用,由类
Object
定义的hashCode方法确实为不同对象返回不同的整数。 (在某个时间点,hashCode可能或可能不被实现为对象的存储器地址的某些功能。)- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
- 只要在执行Java应用程序时多次在同一个对象上调用该对象,则
-
-