char
日本語 | 文字 |
英語 | char |
ふりがな | きゃら、きゃらくた、ちゃー |
フリガナ | キャラ、キャラクタ、チャー |
プリミティブ型のひとつ。
文字を格納するための型。
ラッパークラスはCharacterクラス。
char型で宣言された変数は、16ビット(2バイト)分のメモリ領域を使用する。
左端のビットも含めた8ビットを使用して、0~65535の整数値を格納することができる。
だが、char型変数の本来の目的は、文字を格納するためにある。char型変数には通常「Unicodeの一文字を表す整数値」を格納する。
サイズとしてはshort型と同じ16ビットだが、short型と異なり「文字を表す整数値」を格納するために使用する。
そのため他の整数値型と異なり、符号なし整数値型であり、正の値のみ格納できる。
これは、格納している整数値が単なる「Unicodeの一文字を表す整数値」であり、負の値に意味がないためである。他の整数値型は左端のビットを符号に使用しているが、char型変数は左端のビットも含め16ビット全体で「正の整数のみ格納する」ようにしている。
これにより、char型変数同士の比較は「正の整数同士の比較」となる。
格納される値は「Unicodeの一文字を表す整数値」である。Unicodeは2バイトのため、この2バイトの値が格納されることになる。また、他の文字コードの文字を格納することは基本的にない。
文字を格納するための型。
ラッパークラスはCharacterクラス。
char型で宣言された変数は、16ビット(2バイト)分のメモリ領域を使用する。
左端のビットも含めた8ビットを使用して、0~65535の整数値を格納することができる。
だが、char型変数の本来の目的は、文字を格納するためにある。char型変数には通常「Unicodeの一文字を表す整数値」を格納する。
サイズとしてはshort型と同じ16ビットだが、short型と異なり「文字を表す整数値」を格納するために使用する。
そのため他の整数値型と異なり、符号なし整数値型であり、正の値のみ格納できる。
これは、格納している整数値が単なる「Unicodeの一文字を表す整数値」であり、負の値に意味がないためである。他の整数値型は左端のビットを符号に使用しているが、char型変数は左端のビットも含め16ビット全体で「正の整数のみ格納する」ようにしている。
これにより、char型変数同士の比較は「正の整数同士の比較」となる。
格納される値は「Unicodeの一文字を表す整数値」である。Unicodeは2バイトのため、この2バイトの値が格納されることになる。また、他の文字コードの文字を格納することは基本的にない。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// char型の変数を宣言します。
char ch;
// メモリ上に16ビットの領域が確保されました。
// ここに文字'あ'を格納します。
ch = 'あ';
// それを出力します。
System.out.println( ch );
// あ
// char型は、実際は整数値を格納する2バイトサイズ
// の型です。
short sh = (short)ch;
System.out.println( Integer.toHexString( sh ) );
// 3042
// 「あ」は実際には0x3042という整数値で、それが
// char型変数に格納されているということです。
// char型変数に格納された「あ」がどのように
// ビットとして格納されているか見てみます。
outputCharBit( ch );
// 0011000001000010
// このように「あ」という文字、つまり
// 0x3042というchar型整数は、
// 「0011000001000010」という
// 「0か1」を16個並べた形で格納されています。
// char型変数は符号なし整数値型なので、負の値は
// 普通は格納できません。
// ※コンパイルエラーの例
// char ch1 = -1;
// ※エラーメッセージ
// 型の不一致: int から char には変換できません
// ※コンパイルエラーの例ここまで
// キャストして無理矢理入れても、内部では符号なし
// 整数値として扱われます。
char ch1 = 1;
char ch2 = (char)-1;
System.out.println
( Integer.parseInt( Integer.toHexString( ch2 ), 16 ) );
outputCharBit( ch2 );
// 65535
// 1111111111111111
// つまり負の値は実際のビット値そのままに格納されます。
// char型変数内のこれらの値は、左端のビットが符号として
// 扱われず、16ビット全体で正の整数値を表現します。
// なので、比較する際は正の整数値として比較します。
if( ch1 < ch2 )
{
// ここに来ます。
System.out.println( "1 < -1" );
}
else if( ch1 > ch2 )
{
System.out.println( "1 > -1" );
}
else
{
System.out.println( "1 == -1" );
}
// 1 < -1
// このように「1 < -1」という結果になります。
// 負の値を格納しても、char型変数同士の比較をする際に
// 正の整数と見なして比較するため、実際には
// 「1 < 65535」という比較をしているわけです。
// 最大値と最小値はCharacterクラスのstaticフィールド
// として宣言されています。
ch = Character.MAX_VALUE;
System.out.println( ch );
System.out.println( Integer.toHexString( ch ) );
System.out.println
( Integer.parseInt( Integer.toHexString( ch ), 16 ) );
outputCharBit( ch );
//
// ffff
// 65535
// 0111111111111111
ch = Character.MIN_VALUE;
System.out.println( ch );
System.out.println( Integer.toHexString( ch ) );
System.out.println
( Integer.parseInt( Integer.toHexString( ch ), 16 ) );
outputCharBit( ch );
//
// 0
// 0
// 0000000000000000
// ただ、この例にあるように、最大値・最大値共に
// 文字としては意味がありません。使うことは少ない
// でしょう。
}
/**
* char型変数の中身をビット形式で出力します。
*/
private static void outputCharBit( char ch )
{
char flag = 1;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 16; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
if( ( ch & flag ) == 0 )
{
strbuf.insert( 0, "0" );
}
else
{
strbuf.insert( 0, "1" );
}
// 2倍することでビットシフトします。
flag *= 2;
// (<<演算子を使用するとint型にキャスト
// されるので*演算子を使用しています)
}
System.out.println( strbuf );
}
}
public class Sample
{
public static void main( String[] args )
{
// char型の変数を宣言します。
char ch;
// メモリ上に16ビットの領域が確保されました。
// ここに文字'あ'を格納します。
ch = 'あ';
// それを出力します。
System.out.println( ch );
// あ
// char型は、実際は整数値を格納する2バイトサイズ
// の型です。
short sh = (short)ch;
System.out.println( Integer.toHexString( sh ) );
// 3042
// 「あ」は実際には0x3042という整数値で、それが
// char型変数に格納されているということです。
// char型変数に格納された「あ」がどのように
// ビットとして格納されているか見てみます。
outputCharBit( ch );
// 0011000001000010
// このように「あ」という文字、つまり
// 0x3042というchar型整数は、
// 「0011000001000010」という
// 「0か1」を16個並べた形で格納されています。
// char型変数は符号なし整数値型なので、負の値は
// 普通は格納できません。
// ※コンパイルエラーの例
// char ch1 = -1;
// ※エラーメッセージ
// 型の不一致: int から char には変換できません
// ※コンパイルエラーの例ここまで
// キャストして無理矢理入れても、内部では符号なし
// 整数値として扱われます。
char ch1 = 1;
char ch2 = (char)-1;
System.out.println
( Integer.parseInt( Integer.toHexString( ch2 ), 16 ) );
outputCharBit( ch2 );
// 65535
// 1111111111111111
// つまり負の値は実際のビット値そのままに格納されます。
// char型変数内のこれらの値は、左端のビットが符号として
// 扱われず、16ビット全体で正の整数値を表現します。
// なので、比較する際は正の整数値として比較します。
if( ch1 < ch2 )
{
// ここに来ます。
System.out.println( "1 < -1" );
}
else if( ch1 > ch2 )
{
System.out.println( "1 > -1" );
}
else
{
System.out.println( "1 == -1" );
}
// 1 < -1
// このように「1 < -1」という結果になります。
// 負の値を格納しても、char型変数同士の比較をする際に
// 正の整数と見なして比較するため、実際には
// 「1 < 65535」という比較をしているわけです。
// 最大値と最小値はCharacterクラスのstaticフィールド
// として宣言されています。
ch = Character.MAX_VALUE;
System.out.println( ch );
System.out.println( Integer.toHexString( ch ) );
System.out.println
( Integer.parseInt( Integer.toHexString( ch ), 16 ) );
outputCharBit( ch );
//
// ffff
// 65535
// 0111111111111111
ch = Character.MIN_VALUE;
System.out.println( ch );
System.out.println( Integer.toHexString( ch ) );
System.out.println
( Integer.parseInt( Integer.toHexString( ch ), 16 ) );
outputCharBit( ch );
//
// 0
// 0
// 0000000000000000
// ただ、この例にあるように、最大値・最大値共に
// 文字としては意味がありません。使うことは少ない
// でしょう。
}
/**
* char型変数の中身をビット形式で出力します。
*/
private static void outputCharBit( char ch )
{
char flag = 1;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 16; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
if( ( ch & flag ) == 0 )
{
strbuf.insert( 0, "0" );
}
else
{
strbuf.insert( 0, "1" );
}
// 2倍することでビットシフトします。
flag *= 2;
// (<<演算子を使用するとint型にキャスト
// されるので*演算子を使用しています)
}
System.out.println( strbuf );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // char型の変数を宣言します。 char ch; // メモリ上に16ビットの領域が確保されました。 // ここに文字'あ'を格納します。 ch = 'あ'; // それを出力します。 System.out.println( ch ); // あ // char型は、実際は整数値を格納する2バイトサイズ // の型です。 short sh = (short)ch; System.out.println( Integer.toHexString( sh ) ); // 3042 // 「あ」は実際には0x3042という整数値で、それが // char型変数に格納されているということです。 // char型変数に格納された「あ」がどのように // ビットとして格納されているか見てみます。 outputCharBit( ch ); // 0011000001000010 // このように「あ」という文字、つまり // 0x3042というchar型整数は、 // 「0011000001000010」という // 「0か1」を16個並べた形で格納されています。 // char型変数は符号なし整数値型なので、負の値は // 普通は格納できません。 // ※コンパイルエラーの例 // char ch1 = -1; // ※エラーメッセージ // 型の不一致: int から char には変換できません // ※コンパイルエラーの例ここまで // キャストして無理矢理入れても、内部では符号なし // 整数値として扱われます。 char ch1 = 1; char ch2 = (char)-1; System.out.println ( Integer.parseInt( Integer.toHexString( ch2 ), 16 ) ); outputCharBit( ch2 ); // 65535 // 1111111111111111 // つまり負の値は実際のビット値そのままに格納されます。 // char型変数内のこれらの値は、左端のビットが符号として // 扱われず、16ビット全体で正の整数値を表現します。 // なので、比較する際は正の整数値として比較します。 if( ch1 < ch2 ) { // ここに来ます。 System.out.println( "1 < -1" ); } else if( ch1 > ch2 ) { System.out.println( "1 > -1" ); } else { System.out.println( "1 == -1" ); } // 1 < -1 // このように「1 < -1」という結果になります。 // 負の値を格納しても、char型変数同士の比較をする際に // 正の整数と見なして比較するため、実際には // 「1 < 65535」という比較をしているわけです。 // 最大値と最小値はCharacterクラスのstaticフィールド // として宣言されています。 ch = Character.MAX_VALUE; System.out.println( ch ); System.out.println( Integer.toHexString( ch ) ); System.out.println ( Integer.parseInt( Integer.toHexString( ch ), 16 ) ); outputCharBit( ch ); // // ffff // 65535 // 0111111111111111 ch = Character.MIN_VALUE; System.out.println( ch ); System.out.println( Integer.toHexString( ch ) ); System.out.println ( Integer.parseInt( Integer.toHexString( ch ), 16 ) ); outputCharBit( ch ); // // 0 // 0 // 0000000000000000 // ただ、この例にあるように、最大値・最大値共に // 文字としては意味がありません。使うことは少ない // でしょう。 } /** * char型変数の中身をビット形式で出力します。 */ private static void outputCharBit( char ch ) { char flag = 1; StringBuffer strbuf = new StringBuffer(); // 全ビットを右からチェックします。 for( int iF1 = 0; iF1 < 16; ++iF1 ) { // 取得した順に出力すると逆順になるので、 // 取得した値を頭に挿入していきます。 if( ( ch & flag ) == 0 ) { strbuf.insert( 0, "0" ); } else { strbuf.insert( 0, "1" ); } // 2倍することでビットシフトします。 flag *= 2; // (<<演算子を使用するとint型にキャスト // されるので*演算子を使用しています) } System.out.println( strbuf ); } }
「みだし」に含まれているページ
「解説」に含まれているページ
- <%@ page contentType
- C++言語
- char
- Character
- CharArrayReader
- CharArrayWriter
- Content-Type
- FileReader
- LineNumberInputStream
- Reader
- short
- StringBufferInputStream
- StringReader
- StringWriter
- switchステートメント
- Unicode
- unsigned
- Writer
- キャラクターセット
- キャラセット
- プリミティブ型
- ラッパー
- 予約語
- 全角
- 半角
- 型変換
- 数値格上げ変換
- 整数
- 文字
- 文字ストリーム
- 文字リテラル
- 文字入力ストリーム
- 文字集合
- 明示的
- 符号
- 符号なし
- 符号付き
- 自然数
「サンプルプログラムとか」に含まれているページ
- '
- 127.0.0.1
- <%! %>
- <%-- --%>
- <%= %>
- <%@ %>
- <%@ page
- <%@ page contentType
- <%@ page errorPage
- <%@ page import
- <%@ page isErrorPage
- <%@ taglib
- <jsp:useBean>
- \"
- \'
- ]
- ASCII
- BufferedReader
- C++言語
- char
- Character
- CharArrayReader
- CharArrayWriter
- CharSequence
- classesディレクトリ
- const
- Content-Type
- Cookie
- CP932
- C言語
- DataInputStream
- DataOutputStream
- doGet
- doPost
- EOF
- EOFException
- FileReader
- FilterReader
- FilterWriter
- GET
- HEAD
- HTTP
- HttpServlet
- HttpServletRequest
- HttpServletResponse
- HttpSession
- HttpURLConnection
- InputStreamReader
- IPアドレス
- Jasper
- JasperException
- java.net.URL
- JavaBeans
- JSP
- JspWriter
- JSPコメント
- JSPディレクティブ
- JSP宣言
- JSP式
- JSP指示子
- JSP暗黙オブジェクト
- JSP暗黙オブジェクト「application」
- JSP暗黙オブジェクト「config」
- JSP暗黙オブジェクト「exception」
- JSP暗黙オブジェクト「out」
- JSP暗黙オブジェクト「pageContext」
- JSP暗黙オブジェクト「request」
- JSP暗黙オブジェクト「response」
- JSP暗黙オブジェクト「session」
- JSTL
- libディレクトリ
- localhost
- PageContext
- PipedReader
- PipedWriter
- POST
- PrintWriter
- Properties
- PushbackReader
- Reader
- RequestDispatcher
- ServletConfig
- ServletContext
- StringIndexOutOfBoundsException
- StringReader
- substring
- switch
- switchステートメント
- TCP
- Unicode
- URI
- URL
- web.xml
- whileステートメント
- Windows-31J
- Writer
- 「-」
- 「~」
- カスタムタグライブラリ
- キャスト演算子
- キャッシュ
- クッキー
- クライアント
- クライアントサーバーシステム
- クロスサイトスクリプティング
- コード
- サニタイジング
- サーバー
- サーブレット
- システムプロパティ
- シーケンス
- スクリプトレット
- ステートレス
- セッション
- セッションID
- セッションスコープ
- ソケット
- タグライブラリ
- タグリブ
- ダンプ
- テキストファイル
- ドメイン名
- バッファアンダーフロー
- バッファアンダーラン
- バッファオーバーフロー
- バッファオーバーラン
- プリミティブ型
- ホスト
- ポート番号
- ラッパー
- リクエスト
- リクエストスコープ
- リクエストパラメーター
- リクエストヘッダー
- リテラル
- リフレクション
- レスポンス
- レスポンスヘッダー
- 丸数字
- 二項演算子
- 入力フォーム
- 全角
- 制御コード
- 半角
- 半角カタカナ
- 改行文字
- 数値格上げ変換
- 文字
- 文字コード
- 文字リテラル
- 文字化け
- 明示的
- 暗黙的
- 環境変数
- 符号
- 符号なし
- 符号付き