parseint源码(parseint实现)
本文目录一览:
- 1、关于java中documentlistener的问题,以下附上源码
- 2、java parseInt和valueof的区别
- 3、用java写一个函数,实现Integer.parseInt方法相同的功能
- 4、突然想到一个问题,在java里面如果我把String的数要转化为整型的,那么 Interger.parsInt和valueOf
- 5、java Integer.parseInt和valueOf 哪个效率更快,占用内存少。
- 6、parseInt是什么意思
关于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不符合二进制数字,所以无法转换出正确的数字