java问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java问题相关的知识,希望对你有一定的参考价值。

String umName;
BigDecimal pri;
umName = sheet.getCell(8, datarows).getContents(); 这句是正确的。
pri = sheet.getCell(9, datarows).getContents();这个改怎么改?

BigDecimal这个类就只有一个构造方法接收Stying
BigDecimal(String val)
将 BigDecimal 的字符串表示形式转换为 BigDecimal。
这个是注解.自己看把

BigDecimal
public BigDecimal(String val)将 BigDecimal 的字符串表示形式转换为 BigDecimal。字符串表示形式由可选符号 '+' ('\u002B') 或 '-' ('\u002D') 组成,后跟零或多个十进制数字(“整数”)的序列,可以选择后跟一个小数,也可以选择后跟一个指数。
该小数由小数点以及后跟的零或更多十进制数字组成。字符串必须至少包含整数或小数部分中的一个数字。由符号、整数和小数部分组成的数字称为有效位数。

指数由字符 'e'('\u0065') 或 'E' ('\u0045') 以及后跟的一个或多个十进制数字组成。指数的值必须位于 Integer.MAX_VALUE (Integer.MIN_VALUE+1) 和 Integer.MAX_VALUE(包括)之间。

更正式地说,以下语法描述了此构造方法接受的字符串:

BigDecimalString:
Signopt Significand Exponentopt

Sign:
+
-

Significand:
IntegerPart .FractionPartopt
. FractionPart
IntegerPart

IntegerPart:
Digits

FractionPart:
Digits

Exponent:
ExponentIndicator SignedInteger

ExponentIndicator:
e
E

SignedInteger:
Signopt Digits

Digits:
Digit
Digits Digit

Digit:
Character.isDigit(char) 对其返回 true 的任何字符,如 0、1、2……
返回的 BigDecimal 的标度将是小数部分中的数字位数,如果该字符串不包含小数点,则标度为零,这取决于对指数的调整;如果字符串包含一个指数,则从标度减去该指数。得到的标度值必须位于 Integer.MIN_VALUE 和 Integer.MAX_VALUE(包括)之间。

Character.digit(char, int) 集提供从字符到数字的映射,以转换成基数 10。该字符串不能包含任何额外字符(例如,空白)。

示例:
返回的 BigDecimal 的值等于有效位数 × 10 指数。对于左边的每个字符串,得到的表示形式 [BigInteger, scale] 显示在右边。

"0" [0,0]
"0.00" [0,2]
"123" [123,0]
"-123" [-123,0]
"1.23E3" [123,-1]
"1.23E+3" [123,-1]
"12.3E+7" [123,-6]
"12.0" [120,1]
"12.3" [123,1]
"0.00123" [123,5]
"-1.23E-12" [-123,14]
"1234.5E-4" [12345,5]
"0E+7" [0,-7]
"-0" [0,0]
注:对于不是 float、double NaN 和 ±Infinity 的值,此构造方法与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会遇到 BigDecimal(double) 构造方法的不可预知问题。

参数:
val - BigDecimal 的字符串表示形式。
抛出:
NumberFormatException - 如果 val 不是 BigDecimal 的有效表示形式。
参考技术A pri=new BigDecimal(sheet.getCell(9, datarows).getContents()); 参考技术B pri = Integer.perseInt(sheet.getCell(9, datarows).getContents()); 参考技术C 看API文档里面方法返回值和参数类型

Java中String问题

String i=new String();
i="Hello";
String k="Hello";
System.out.println(i==k); //结果为true
为什么? 按说地址应该不是一样的啊
String i=new String("Hello");
String k="Hello";
System.out.println(i==k); //结果为false
为什么这样结果就为false了?

你可以百度下 String 串池的概念,
我只是给你简单说下吧
①String i = new String(); ② i="hello" ;③ String k = "hello" ;

① : 创建了一个对象 new String() ,并将该对象赋值给 i , i 不是对象,而是引用!(必须理解)
②: 从串池中创建一个对象“hello” 并将该对象赋值给 i , 此时 i 指向 “hello” 所在的地址,而不是 new String() 所在的地址
③: 因为串池中已经存在 hello对象, 所以 直接把该对象 赋值给 k , 此时k指向 hello所在的地址
System.out.println(i==k); 除基本类型外, 通过 == 来比较,为比较地址,而根据上述分析,两者地址相同,所以返回true

=================================================================

①String i=new String("Hello"); ②String k="Hello"; System.out.println(i==k); //结果为false

①:创建的两个对象 ,一个是 存在串池中的 Hello 对象 , 一个是存在在堆空间中的 new String("Hello") 对象 , 并将堆空间中的对象赋值给 引用 i
②: 因为串池中已经存在对象Hello , 所以该语句没有创建对象,而是把已经存在的对象Hello赋值给引用 k , 从而 k的地址指向 串池中的对象
同理: == 比较地址, 2者地址很明显不相同, 前者在堆空间存放, 后者在 串池中存放

=====================================================================
推荐简单看下串池的概念,和为什么要引入串池 来处理String
参考技术A 首先说下,java是引用,引用某个对象。
第一次输出:
i引用的是“Hello”这个对象,假如叫做“张三”
k引用的也是这个“Hello”,这个“Hello”就是刚刚那个,所以这个也是“张三”
所以i和k的引用是相同的,所以为true;
第二次输出:
i是new的一个对象,虽然内容也是Hello,就像世界上又有个“张三”,只是同名而已,但不是一个人。
k还是刚刚上面那个“张三”
i引用的是一个人,k引用的是另一个人,只是名字相同,但是引用的对象是不同的,这样的比方恰当吗?希望能帮到你
参考技术B 兄弟,看看堆和栈,你就能知道了

以上是关于java问题的主要内容,如果未能解决你的问题,请参考以下文章

java问题

java 小问题

java问题

java实现日期排序问题

java问题

Java中String问题