A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
Stringクラスのlength()は「メソッド」です。
メソッドなので「()」(カッコ)が付きます。
配列の場合は…うまく解説してあるページを探したのですが…見つかりませんでした。
↓厳密には違いますが、以下のような説明でうまく伝わるでしょうか?
配列もオブジェクトです。
lengthは「publicでfinalなインスタンス変数」なので「()」(カッコ)が付かない。
↓のような感じのクラス
public class 配列{
public final int length;
public 配列(int len){
length = len;
}
}
No.2
- 回答日時:
まず、どちらも「length」という名前で似たような機能ですが、無関係であると考えてください。
『「length」というものがまずあって、それはjava.lang.Stringにも配列にも使える』、ということではありません。カッコがついているものはメソッドの呼び出しで、カッコがついていないものはフィールドの参照です。java.lang.String#length()はメソッドですが、配列のlengthはフィールドです。したがって使うときの構文が違います。
Javaが注意深く設計されていれば、もっと一貫性のある定義になっていたかもしれません。言語によっては「文字列」は「文字の配列」で文字列を配列のとして扱え、その長さも配列とまったく同じ構文で参照できるものもあります。
この回答へのお礼
お礼日時:2007/11/15 11:04
ご回答ありがとうございます。
なぜ配列には length()メソッドを用意せずに、lengthフィールドを
直接参照する仕様にしたのか、不思議に思っています。
何か技術的な問題点があったのでしょうか?
どなたかご存知の方おりましたら、教えてください。
No.3
- 回答日時:
>なぜ配列には length()メソッドを用意せずに、lengthフィールドを
>直接参照する仕様にしたのか、不思議に思っています。
配列長の仕様と配列の利用頻度によってそう決めたのでは?というのが自分の考えです。
配列はインスタンスの生成時にその長さが決まり、変更はできません。
つまり、値が固定化されているので、メソッドのように何らかの処理をして値を取得する必要はなく、
フィールドの値で十分管理できます。
これをメソッド化しても、フィールドの値を取得するだけの実装で十分だと思われます。
なので、メソッド化すると、余分なオーバーヘッドが発生するわけです。
さらに配列は至るところで使用されています。
おそらくStringクラスのメソッド内部でも使用されているでしょう。
それほど利用頻度の高いものだと、ちょっとしたオーバーヘッドであっても、
プログラム全体の処理速度を考えると無視できなくなる可能性はあります。
現在のPCではオーバーヘッドといっても人間が体感できないくらいかもしれません。
しかし、Javaが誕生したのは1995年で、当時のPCは今とは比べられないほど貧弱でした。
おまけに中間言語であり「そもそも遅い」Javaですから、可能な限りの処理速度向上をはかりたい、
という開発者の思惑はあったのかもしれません。
さらに言えば、JavaはPC向けの言語というだけでなく、幅広いコンピュータに搭載可能である、
というのが基本理念であるため、PCよりももっと貧弱な環境でも動作するように考慮する必要があります。
確かに一貫性をもって設計すれば、最初から戸惑うこともないかもしれませんが、
別の考え方をすると、
慣れてしまえばその違いはたいしたことない、むしろそれが処理速度の足枷になるよりはマシだ、
ともいえます。
ただ、この辺は考え方にもよるところですが…
もちろん、自分の考えが正解とは限らないので、本当の所はJavaの開発者に聞くしかないですが…
No.4
- 回答日時:
>何か技術的な問題点があったのでしょうか?
技術っていうより、どうしても嫌なら以下のような独自クラスを作ればいいと思う。
public class array{
static public void main(String... $0_){
int[] hairetsu = {0,1,2};
System.out.println("配列の長さ:" + hairetsu.length);
arrays intarray = new arrays(hairetsu);
System.out.println("配列の長さ:" + intarray.length());
}
}
class arrays{ // SJC-P勉強中の方は、これを無名クラスにしてみよう。
int[] con;
arrays(int[] con){
this.con = con;
}
int length(){
return con.length;
}
}
>なぜ配列には length()メソッドを用意せずに、lengthフィールドを
>直接参照する仕様にしたのか、不思議に思っています。
仕様っていうより、動作的にそのようになってしまうと思います。#2さんの回答でも納得できないとしたら、オブジェクト指向はまだ始めたばかりでしょうか?
JavaWorld.com
「Study guide: Java's character and assorted string classes support text-processing」
http://www.javaworld.com/javaworld/jw-10-2002/jw …
上記サイト内でも、次のような記述があります。
Confusing length() with length leads to compiler errors. length() is a method that returns the current number of characters in a String's value array, whereas length is a read-only array field that returns the maximum number of elements in an array.
普通にJavaを勉強されてきた方ならば、「あ~そうか、なるほど。」ってなると思うのですが。
ただ、いろいろとググっていたら、どうやら初期のJDKでは配列の要素数取得にlength()メソッドが使われていたとのこと。[JavaHouse-Brewers:5708]
James Goslingさんも、当時はどのように考えていらしたのでしょうかね~。(日本そのものには大変興味があるらしいですが、最近はNintendo DSとか携帯向けのアプリなんかにハマっているそうです。)
参考URL:http://blogs.sun.com/jag/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- 英語 An increase in implant length (7.5 mm) did not exh 1 2022/07/20 13:43
- 英語 SPECS の所の LENGTH というのは、BARREL LENGTH なのか?全体の長さなのか? 1 2022/04/27 20:05
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- 英語 Length stoppers are provided in the kit and their 4 2022/04/22 00:51
- Perl perlについての質問 2 2022/10/17 15:25
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- 統計学 生物統計学の質問 7 2022/05/17 13:59
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
変数名とDBカラム名の関係性に...
-
改行含むテキストの表示の仕方
-
プログラミングの問題です。大...
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
リレーションエンティティクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
JAの支部?地域の農協のカード...
-
eclipse実行ができない
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
正規表現について質問です。 カ...
-
list の空は [] ってあわらすのに
-
「main メソッドを持つクラスが...
-
あんまりお料理しないのに台所...
-
JaneStyleのスレッドが見れなく...
-
jdk17.06のインストーラーが起...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
キー入力について
-
CSV出力を画面から選択したデー...
-
Processingでマウスクリックで...
-
次のhtml・cssでspan内の文字を...
-
JSFタグのfタグとは
おすすめ情報