ValueLayout.OfChar (Java SE 26 & JDK 26)
Description: declaration: module: java.base, package: java.lang.foreign, interface: ValueLayout, interface: OfChar
Keywords: java.lang.foreign.ValueLayout.OfChar interface

# Interface ValueLayout.OfChar

All Superinterfaces:
  `MemoryLayout, ValueLayout`

Enclosing interface:
  `ValueLayout`

public static sealed interface ValueLayout.OfChar extends ValueLayout
A value layout whose carrier is `char.class`.

Since:
  22
See Also:
  - `ValueLayout.JAVA_CHAR`
  - `ValueLayout.JAVA_CHAR_UNALIGNED`

- ## Nested Class Summary

  ### Nested classes/interfaces declared in interface MemoryLayout

  `MemoryLayout.PathElement`
  Modifier and Type
  Interface
  Description
  `static interface`
  `MemoryLayout.PathElement`
  An element in a layout path.

  ### Nested classes/interfaces declared in interface ValueLayout

  `ValueLayout.OfBoolean, ValueLayout.OfByte, ValueLayout.OfChar, ValueLayout.OfDouble, ValueLayout.OfFloat, ValueLayout.OfInt, ValueLayout.OfLong, ValueLayout.OfShort`
  Modifier and Type
  Interface
  Description
  `static interface`
  `ValueLayout.OfBoolean`
  A value layout whose carrier is `boolean.class`.
  `static interface`
  `ValueLayout.OfByte`
  A value layout whose carrier is `byte.class`.
  `static interface`
  `ValueLayout.OfChar`
  A value layout whose carrier is `char.class`.
  `static interface`
  `ValueLayout.OfDouble`
  A value layout whose carrier is `double.class`.
  `static interface`
  `ValueLayout.OfFloat`
  A value layout whose carrier is `float.class`.
  `static interface`
  `ValueLayout.OfInt`
  A value layout whose carrier is `int.class`.
  `static interface`
  `ValueLayout.OfLong`
  A value layout whose carrier is `long.class`.
  `static interface`
  `ValueLayout.OfShort`
  A value layout whose carrier is `short.class`.

- ## Field Summary

  ### Fields declared in interface ValueLayout

  `ADDRESS, ADDRESS_UNALIGNED, JAVA_BOOLEAN, JAVA_BYTE, JAVA_CHAR, JAVA_CHAR_UNALIGNED, JAVA_DOUBLE, JAVA_DOUBLE_UNALIGNED, JAVA_FLOAT, JAVA_FLOAT_UNALIGNED, JAVA_INT, JAVA_INT_UNALIGNED, JAVA_LONG, JAVA_LONG_UNALIGNED, JAVA_SHORT, JAVA_SHORT_UNALIGNED`
  Modifier and Type
  Field
  Description
  `static final AddressLayout`
  `ADDRESS`
  An address layout constant whose size is the same as that of a machine address (`size_t`), byte alignment set to `sizeof(size_t)`, byte order set to `ByteOrder.nativeOrder()`.
  `static final AddressLayout`
  `ADDRESS_UNALIGNED`
  An unaligned address layout constant whose size is the same as that of a machine address (`size_t`), and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfBoolean`
  `JAVA_BOOLEAN`
  A value layout constant whose size is the same as that of a Java `boolean`, byte alignment set to 1, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfByte`
  `JAVA_BYTE`
  A value layout constant whose size is the same as that of a Java `byte`, byte alignment set to 1, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfChar`
  `JAVA_CHAR`
  A value layout constant whose size is the same as that of a Java `char`, byte alignment set to 2, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfChar`
  `JAVA_CHAR_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `char` and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfDouble`
  `JAVA_DOUBLE`
  A value layout constant whose size is the same as that of a Java `double`, byte alignment set to 8, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfDouble`
  `JAVA_DOUBLE_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `double` and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfFloat`
  `JAVA_FLOAT`
  A value layout constant whose size is the same as that of a Java `float`, byte alignment set to 4, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfFloat`
  `JAVA_FLOAT_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `float` and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfInt`
  `JAVA_INT`
  A value layout constant whose size is the same as that of a Java `int`, byte alignment set to 4, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfInt`
  `JAVA_INT_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `int` and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfLong`
  `JAVA_LONG`
  A value layout constant whose size is the same as that of a Java `long`, byte alignment set to 8, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfLong`
  `JAVA_LONG_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `long` and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfShort`
  `JAVA_SHORT`
  A value layout constant whose size is the same as that of a Java `short`, byte alignment set to 2, and byte order set to `ByteOrder.nativeOrder()`.
  `static final ValueLayout.OfShort`
  `JAVA_SHORT_UNALIGNED`
  An unaligned value layout constant whose size is the same as that of a Java `short` and byte order set to `ByteOrder.nativeOrder()`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ValueLayout.OfChar`
  `withByteAlignment(long byteAlignment)`
  Returns a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes).
  `ValueLayout.OfChar`
  `withName(String name)`
  Returns a memory layout with the same characteristics as this layout, but with the given name.
  `ValueLayout.OfChar`
  `withOrder(ByteOrder order)`
  Returns a value layout with the same characteristics as this layout, but with the given byte order.
  `ValueLayout.OfChar`
  `withoutName()`
  Returns a memory layout with the same characteristics as this layout, but with no name.

  ### Methods declared in interface MemoryLayout

  `arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle`
  Modifier and Type
  Method
  Description
  `VarHandle`
  `arrayElementVarHandle(MemoryLayout.PathElement... elements)`
  Creates a var handle that accesses adjacent elements in a memory segment at offsets selected by the given layout path, where the accessed elements have this layout, and where the initial layout in the path is this layout.
  `long`
  `byteAlignment()`
  Returns the alignment constraint associated with this layout, expressed in bytes.
  `long`
  `byteOffset(MemoryLayout.PathElement... elements)`
  Computes the offset, in bytes, of the layout selected by the given layout path, where the initial layout in the path is this layout.
  `MethodHandle`
  `byteOffsetHandle(MemoryLayout.PathElement... elements)`
  Creates a method handle that computes the offset, in bytes, of the layout selected by the given layout path, where the initial layout in the path is this layout.
  `long`
  `byteSize()`
  Returns the layout size, in bytes.
  `boolean`
  `equals(Object other)`
  Compares the specified object with this layout for equality.
  `int`
  `hashCode()`
  Returns the hash code value for this layout.
  `Optional<String>`
  `name()`
  Returns the name (if any) associated with this layout.
  `long`
  `scale(long offset, long index)`
  Returns `offset + (byteSize() * index)`.
  `MethodHandle`
  `scaleHandle()`
  Returns a method handle that can be used to invoke `MemoryLayout.scale(long, long)` on this layout.
  `MemoryLayout`
  `select(MemoryLayout.PathElement... elements)`
  Returns the layout selected from the provided path, where the initial layout in the path is this layout.
  `MethodHandle`
  `sliceHandle(MemoryLayout.PathElement... elements)`
  Creates a method handle which, given a memory segment, returns a slice corresponding to the layout selected by the given layout path, where the initial layout in the path is this layout.
  `String`
  `toString()`
  Returns the string representation of this layout.
  `VarHandle`
  `varHandle(MemoryLayout.PathElement... elements)`
  Creates a var handle that accesses a memory segment at the offset selected by the given layout path, where the initial layout in the path is this layout.

  ### Methods declared in interface ValueLayout

  `carrier, order, varHandle`
  Modifier and Type
  Method
  Description
  `Class<?>`
  `carrier()`
  Returns the carrier associated with this value layout.
  `ByteOrder`
  `order()`
  Returns the value's byte order.
  `VarHandle`
  `varHandle()`
  Returns a var handle which can be used to access values described by this value layout, in a given memory segment.

- ## Method Details

  - ### withName

    ValueLayout.OfChar withName(String name)
    Returns a memory layout with the same characteristics as this layout, but with the given name.
    Specified by:
      `withName` in interface `MemoryLayout`
    Specified by:
      `withName` in interface `ValueLayout`
    Parameters:
      `name` - the layout name
    Returns:
      a memory layout with the same characteristics as this layout, but with the given name
    See Also:
      - `MemoryLayout.name()`

  - ### withoutName

    ValueLayout.OfChar withoutName()
    Returns a memory layout with the same characteristics as this layout, but with no name.
    Specified by:
      `withoutName` in interface `MemoryLayout`
    Specified by:
      `withoutName` in interface `ValueLayout`
    Returns:
      a memory layout with the same characteristics as this layout, but with no name
    See Also:
      - `MemoryLayout.name()`

  - ### withByteAlignment

    ValueLayout.OfChar withByteAlignment(long byteAlignment)
    Returns a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes).
    Specified by:
      `withByteAlignment` in interface `MemoryLayout`
    Specified by:
      `withByteAlignment` in interface `ValueLayout`
    Parameters:
      `byteAlignment` - the layout alignment constraint, expressed in bytes
    Returns:
      a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes)
    Throws:
      `IllegalArgumentException` - if `byteAlignment` is not a power of two

  - ### withOrder

    ValueLayout.OfChar withOrder(ByteOrder order)
    Returns a value layout with the same characteristics as this layout, but with the given byte order.
    Specified by:
      `withOrder` in interface `ValueLayout`
    Parameters:
      `order` - the desired byte order
    Returns:
      a value layout with the same characteristics as this layout, but with the given byte order