Выкарыстанне двайны супраць Double ў аб'яве зменнай

Я спрабаваў стварыць гэтую праграму з кодам <> в аб'яўляцца як двайны , а не Double , не маглі б вы сказаць мне, чаму гэтая праграма не працуе. Хіба гэта не павінна быць аўтаматычна пакуецца і разгортвалі, нешта накшталт бокса і распакавання прымітыўнага тыпу дадзеных? пастскрыптум - Я пачатковец у Java я не памятаю, што гэта на самай справе вядома як, але я недзе чытаў гэта ідзе гаворка, як бокс і распакаванне прымітыўных тыпаў, каб запусціць іх метадаў.

public class ToStringDemo {

    public static void main(String[] args) {
        double d = 858.48;
        String s = d.toString();

        int dot = s.indexOf('.');

        System.out.println(dot + " digits " +
            "before decimal point.");
        System.out.println( (s.length() - dot - 1) +
            " digits after decimal point.");
    }
}

Note - Above program gives error at String s = d.toString();

0
@PradeepSimha ня nassecary. Просты спосаб: Радок S = "" + D; таксама працуе.
дададзена аўтар reporter, крыніца
Я думаю, вам трэба выкарыстоўваць String.valueOf (...) , каб пераўтварыць вашы падвойную радок.
дададзена аўтар Pradeep Simha, крыніца

7 адказы

<�Р> Радок S = d.toString (); </р>

Гэта памылка схільны код, як двайны не можа быць разыменовываются. Відавочнае вы павінны баксаваць яго Double . <�Код> ((двайны) г) .ToString() .

double is primitive type, it does not have toString method. Only object contains methods. And toString is method of Object class, you can use Double which has toString method.

Double d = 858.48;
String s = d.toString();
2
дададзена
не зусім. Проста дэкампіляваць код і праверыць
дададзена аўтар Subhrajyoti Majumder, крыніца
добра, але тое, што адбываецца, калі мы друкуем у суправаджаецца, двайны d = 3,4; SYSOUT (дз); , То і ToString() выклікаецца на яго, узнікае пытанне, чаму не бокс адбываецца ??
дададзена аўтар anshulkatta, крыніца

Вы не можаце выклікаць метады прымітыўных тыпаў, такіх як двайны - у той час як вы можаце называць іх па тыпах абалонак, як Double . Вось чаму код, які вы далі не працуе.

Бокс гэта адбываецца аўтаматычна - але толькі тады, калі вы фактычна далі яму мэта для канверсіі. Напрыклад, вы можаце выкарыстаць:

double d = 858.48;
Double boxed = d;
String text = boxed.toString();

... але гэта прамежкавае пераўтварэнне ў Double не бывае без згадкі ў кодзе. Вы ўсё яшчэ можаце зрабіць гэта ў адным радку, вядома:

String text = ((Double) d).toString();

Вам не трэба баксаваць на ўсё, каб пераўтварыць значэнне ў радок, улічыце:

String text1 = String.valueOf(d);
String text2 = Double.toString(d);

... будзе як працаваць таксама.

1
дададзена

double is a primitive datatype, whereas Double is a wrapper class. Using Double empowers you to invoke methods like toString(). You can do something like

Double d = 2.4;
d.toString();

Але вы не можаце зрабіць нешта накшталт

double d = 2.4;
d.toString();   //Generates compile time error.
1
дададзена

паспрабаваць гэта ..

 public class ToStringDemo {

public static void main(String[] args) {
    double d = 858.48;
    String s = String.valueOf(d);
    int dot = s.indexOf('.');
    System.out.println(dot + " digits " +
        "before decimal point.");
    System.out.println( (s.length() - dot - 1) +
        " digits after decimal point.");
}
}
0
дададзена

d.toString (); не будзе працаваць, як D з'яўляецца прымітыўным тыпам. Вы можаце выклікаць функцыю .ToString на аб'екты толькі. Так што калі вы выкарыстоўваеце падвойныя, які з'яўляецца аб'ектам, а не прымітыўным, ваш код будзе працаваць. Яна не мае нічога агульнага з Autoboxing.

0
дададзена

It is not being autoboxed because there is no Double reference. Try ((Double)d).toString()

0
дададзена

Прычына, па якой праграма не будзе працаваць, таму што вы спрабуеце выклікаць метад прымітыўнага тыпу дадзеных. Капітал D двайны ўяўляе сабой двайны аб'ект, які функцыянуе падобна першабытнай двайны пераменны у тым, што яна захоўвае падвойныя значэння, але з дадатковай функцыяй, якія вы можаце назваць наперад вызначаныя метады на яго.

Калі вы хацелі б выкарыстоўваць двайны прымітыўна вы маглі б зрабіць нешта накшталт гэтага:

double aDouble = 100;
String aString = Double.toString(aDouble);

Прымітыўны перадаецца ў якасці параметру метаду на двайны аб'ект, які будзе вяртаць радок.

0
дададзена