問題タブ [autoboxing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java で double を比較すると奇妙な結果が得られる
なぜ次のことが起こるのか、私は本当に頭を悩ませることができます:
ただし、これは期待どおりに機能します。
これが何らかの形でオートボクシングに関連していることは確かですが、演算子が使用されているときと呼び出されたときに、なぜ0
ボックス化が異なるの==
.equals
か本当にわかりません。
これは暗黙のうちにequals
契約に違反していませんか?
編集:
速い答えをありがとう。私はそれが異なって箱に入れられていると考えました.本当の問題は:なぜそれが異なって箱に入れられているのですか? これは、直感的で予想されるd == 0d
よりも直感的であるということですが、「直感的に」よりもそうであると思われる場合も同様です。d.equals(0d)
d == 0
Integer
true
d.equals(0)
java - Which is better: letting Java do autoboxing or using valueOf()
I am just wondering is there any difference in letting java autobox say an integer:
or having your code as
Is there any micro optimization on this? I know the second one is more explicit, but it is also more unnecessary typing, is there any difference besides this?.
java - 倍精度および整数変換
私はこれを理解しようとしています:
1/841を印刷すると倍の値が得られるのに、なぜchiSquareを印刷してゼロを印刷するのですか?ハッシュテーブルは<String, Integer>
java - Javaで整数がキャッシュされないのはなぜですか?
このトピックに関する同様の投稿があることは知っていますが、それらは私の質問に完全には対応していません。あなたがするとき:
true
[-128, 127] の範囲の整数が何らかの形でキャッシュされているため、これは (明らかに)ほとんどの場合出力されます。しかし:
戻りfalse
ます。Integer の新しいインスタンスを求めていることは理解していますが、ボックス化されたプリミティブは Java では不変であり、(最初のケースで見られるように) "正しいこと" を行うための機構が既に存在するため、なぜこのようなことが起こるのでしょうか?
10 を持つ Integer のすべてのインスタンスがメモリ内の同じオブジェクトであるとしたら、もっと理にかなっていると思いませんか? 言い換えれば、「文字列インターニング」に似た「整数インターニング」を使用しないのはなぜですか?
さらに良いことに、値 (および型) に関係なく、同じものを表すボックス化されたプリミティブのインスタンスが同じオブジェクトである場合、より意味がありませんか? または、少なくとも正しく応答し==
ますか?
java - Java プリミティブの実装
Java には、基本型のオブジェクトである Integer とプリミティブ バージョンである int の両方があります。
プリミティブバージョンは、より高速/軽量/その他です。したがって、一般的にはそれらを使用する必要があります。
私が疑問に思っているのは、なぜ Java の設計者はオブジェクト型だけを持っておらず、舞台裏での最適化としてプリミティブ バージョンを使用したのかということです。
そう:
次のようなコードにコンパイルされます。
基本的に、この架空の Java コンパイラは、Integer、Double、Float などのインスタンスを同等のプリミティブ型に変換します。オブジェクトが実際に必要な場合 (要素をコンテナに入れる場合など) にのみ、実際の Integer オブジェクトが関与します。
注:上記のコードは、実際には許可されていないことがわかっている Integer オブジェクトで演算子を使用しています。私は架空の Java コンパイラを発明しているので、これは String の場合と同様に Integer/Float/Double の特殊なケースを持つふりをします。
java - Java : LinkedList.toArray() から int にキャストされた、整数のオブジェクト配列のオートボクシング
次のようなコードを使用したいと思います。
...
Integer[]
ただし、これは許可されておらず、 への変換時にへのキャストが自動ボックス化されないようint[]
です。asの代わりにletterIndex
asを宣言せずに同等のことを達成するにはどうすればよいですか?Integer[]
int[]
performance - Scala の標準ライブラリで @specialized なものがほとんどないのはなぜですか?
@specialized
Scala 2.8.1 の標準ライブラリのソース コードでの使用を検索しました。この注釈を使用するトレイトとクラスはほんの一握りのようです: Function0
, Function1
, Function2
, Tuple1
, Tuple2
, Product1
, Product2
, .AbstractFunction0
AbstractFunction1
AbstractFunction2
コレクション クラスはどれも@specialized
. なぜだめですか?これにより生成されるクラスが多すぎますか?
つまり、プリミティブ型でコレクション クラスを使用すると、不要なボックス化とボックス化解除が大量に発生するため、非常に非効率的です。
ボックス化とボックス化解除を回避して、s の不変リストまたはシーケンス (IndexedSeq
特性を含む) を持つ最も効率的な方法は何ですか?Int
maven - axis2-wsdl2code-maven-pluginで-Euwcparamを設定する方法は?
私たちはaxis2を使用してWebサービスクライアントを生成しています(これは今では後悔しています!)。axis2コマンドラインツールを使用すると、switch -Euwcを渡して、生成されたソースでintを整数に、ブール値をブール値などにラップできます。これは、特定のint値またはboolean値がスキーマでnillableであることをaxis2に通知する1つの方法です。
私の質問は、生成されたソースで同じ動作を実現するために、MavenでPOMまたは他の手段を介してこのパラメーターをどのように設定するかです。私のstackoverflowとgoogle検索はあまり明らかにされていません。Jiraの問題があります。これは、開発者が正しい方向を示さずに解決したようです。
構成でunwrapをtrueに設定しても、まったく別のオプションであるため、役に立ちません。将来的にはaxis2を避けたいと思いますが、当面はそれで行き詰まります。
scala - Scalaでボクシング/アンボクシングを見つける方法
バイトコードを見てボクシングが行われているかどうかを scala に教えてもらう方法についてのextemporeの最近の提案に従って、このクラスを作成しました。
のバイトコードを見ましたfoo
:
そこにボックス/アンボックスの兆候はありません。しかし、私はまだ疑わしいので、-print
() でコンパイルしました:
このコードに関する主な所見は、作成された無名関数が に特化されているLong => Double
こと、およびmap
機能がによって提供されていることですlongArrayOps(ls).map
(ArrayOps
は特化されていません)。
問題は、「この例でボックス化/ボックス化解除が行われているか?」です。