体育资讯网

您现在的位置是:首页 > 分类12 > 正文

分类12

parseint源码(parseint实现)

hacker2022-07-17 06:15:37分类1265
本文目录一览:1、关于java中documentlistener的问题,以下附上源码2、

本文目录一览:

关于java中documentlistener的问题,以下附上源码

import java.awt.FlowLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

public class 总金额 extends JFrame

{

public 总金额(String s)

{

setTitle(s);

setSize(300, 150);

setResizable(false);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLayout(new FlowLayout());

String[] ts = {

        "单价:", "数量:", "总价:"

};

final JTextField[] tfs = new JTextField[ts.length];

for(int i = 0; i  ts.length; i++)

{

JLabel label = new JLabel(ts[i]);

tfs[i] = new JTextField(10);

if(i == ts.length - 1)

{

tfs[i].setEditable(false);

}

else

{

tfs[i].getDocument().addDocumentListener(new DocumentListener()

{

private void calc()

{

try

{

double p = Double.parseDouble(tfs[0].getText());

int a = Integer.parseInt(tfs[1].getText());

tfs[2].setText(String.format("%.2f", p * a));

}

catch(NumberFormatException e1)

{

tfs[2].setText(null);

}

}

@Override

public void removeUpdate(DocumentEvent e)

{

calc();

}

@Override

public void insertUpdate(DocumentEvent e)

{

calc();

}

@Override

public void changedUpdate(DocumentEvent e)

{

calc();

}

});

}

JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

panel.add(label);

panel.add(tfs[i]);

add(panel);

}

setVisible(true);

}

public static void main(String args[])

{

new 总金额("总金额");

}

}

java parseInt和valueof的区别

都是Integer的静态方法:

Integer.parseInt(str)是把一个数字字符串转化成int类型的数据

Integer.valueOf(str or num) 是把一个数字或者一个字符串转化为Integer类型的数据;

看源码:

//parseInt 会抛出异常NumberFormatException

public static int parseInt(String s) throws NumberFormatException {

        return parseInt(s,10);

    }

//parseInt 这个源码太长就不贴了   有兴趣可自己百度

 public static int parseInt(String s, int radix)  throws NumberFormatException

    {

     

        return negative ? result : -result;

    }

//参数是数值类型的

 public static Integer valueOf(int i) {

        if (i = IntegerCache.low  i = IntegerCache.high)

            return IntegerCache.cache[i + (-IntegerCache.low)];

        return new Integer(i);

    }

//参数是字符串类型的

 public static Integer valueOf(String s) throws NumberFormatException {

        return Integer.valueOf(parseInt(s, 10));

    }

用java写一个函数,实现Integer.parseInt方法相同的功能

public static int parseInt(String s, int radix)

throws NumberFormatException {

if (s == null) {

throw new NumberFormatException("null");

}

if (radix Character.MIN_RADIX) {

throw new NumberFormatException("radix " + radix

+ " less than Character.MIN_RADIX");

}

if (radix Character.MAX_RADIX) {

throw new NumberFormatException("radix " + radix

+ " greater than Character.MAX_RADIX");

}

int result = 0;

boolean negative = false;

int i = 0, max = s.length();

int limit;

int multmin;

int digit;

if (max 0) {

if (s.charAt(0) == '-') {

negative = true;

limit = Integer.MIN_VALUE;

i++;

} else {

limit = -Integer.MAX_VALUE;

}

multmin = limit / radix;

if (i max) {

digit = Character.digit(s.charAt(i++), radix);

if (digit 0) {

throw new NumberFormatException("For input string: \"" + s

+ "\"");

} else {

result = -digit;

}

}

while (i max) {

// Accumulating negatively avoids surprises near MAX_VALUE

digit = Character.digit(s.charAt(i++), radix);

if (digit 0) {

throw new NumberFormatException("For input string: \"" + s

+ "\"");

}

if (result multmin) {

throw new NumberFormatException("For input string: \"" + s

+ "\"");

}

result *= radix;

if (result limit + digit) {

throw new NumberFormatException("For input string: \"" + s

+ "\"");

}

result -= digit;

}

} else {

throw new NumberFormatException("For input string: \"" + s + "\"");

}

if (negative) {

if (i 1) {

return result;

} else { /* Only got "-" */

throw new NumberFormatException("For input string: \"" + s

+ "\"");

}

} else {

return -result;

}

}

这是Integer里面的源码,替换了某些部分,但整体不会出错

突然想到一个问题,在java里面如果我把String的数要转化为整型的,那么 Interger.parsInt和valueOf

本质上没什么区别,Integer.parsInt返回int类型,Integer.valueOf返回Integer类型。你看看JDK的源码就知道valueOf方法内部也是调用了parseInt方法。如下:

public static Integer valueOf(String s) throws NumberFormatException

{

return new Integer(parseInt(s, 10));

}

java Integer.parseInt和valueOf 哪个效率更快,占用内存少。

占用一样 源码

public static Integer valueOf(String s) throws NumberFormatException {

return Integer.valueOf(parseInt(s, 10));

}

valueOf() 去调用parseInt方法。

parseInt是什么意思

parseInt是用于将字符串根据基数转换成整数。

首先parseInt()函数中可以给定两个参数,第一个是要解析的数,第二个是以多少进制解析。

例如parseInt(‘10’,8)的意思为把一个8进制数10,转换成一个10进制数,最后结果当然为8.

接着我们再看个例子,parseInt(‘100’,8),把一个8进制数100,转换成一个10进制数,最后结果那便是64,记住parseInt把最后结果都是转换成10进制数。

最后再看个例子,parseInt(‘12’,2)把一个二进制数12,转换成一个10进制数,因为二进制数中不存在2,因此解析时仅仅只解析数字1,将二进制的1换成十进制,结果显然就是1.

V8中parseInt函数的源码:【只列出一部分,如需要查看请参见V8中src/conversions-inl.h和src/compiler/js-builtin-reducer.cc】

if (radix == 0) { //如果传入radix是0,则以10进行处理

// Radix detection.

radix = 10;

if (*current == '0') {

++current;

if (current == end) return SignedZero(negative);

if (*current == 'x' || *current == 'X') {

radix = 16;

++current;

if (current == end) return JunkStringValue();

} else {

leading_zero = true;

} else if (radix == 16) { //16进制

if (*current == '0') {

// Allow "0x" prefix.

++current;

if (current == end) return SignedZero(negative);

if (*current == 'x' || *current == 'X') {

++current;

if (current == end) return JunkStringValue();

} else {

leading_zero = true;

if (radix 2 || radix 36) return JunkStringValue(); //radix不在2~36之间的处理

例如解析:

parseInt('0101' , 1) = NaN

parseInt('453' , 2) = NaN因为453不符合二进制数字,所以无法转换出正确的数字

发表评论

评论列表

  • 青迟眉妩(2022-07-17 17:19:35)回复取消回复

    el(new FlowLayout(FlowLayout.RIGHT)); panel.add(label); panel.add(tfs[i]); add(panel); } setVisible(t

  • 瑰颈桔烟(2022-07-17 06:19:09)回复取消回复

    只列出一部分,如需要查看请参见V8中src/conversions-inl.h和src/compiler/js-builtin-reducer.cc】if (radix == 0) { //如果传入radix是0,则以10进行处理// Radi