文章目录
数据结构
Java语言
Integer处理-128-127的数情况
因为valueOf这个函数源码是将常用的-128~127的对象缓存下来
而不是新开辟一个内存空间
所以代码中b1==c1 返回true
而d == e 返回false
int a=128;
Integer b=128;//相当于int b= Integer.valueOf(128);
Integer c=128;
Integer b1=127;
Integer c1=127;
Integer d=new Integer(128);
Integer e=new Integer(128);
System.out.println(a==b);//true
System.out.println(b==c);//false
System.out.println(b1==c1);//true
System.out.println(a==d);//true
System.out.println(c==d);//false
System.out.println(d==e);//false
Integer.parseInt() Integer.valueOf()
前者将String返回成int 或者返回成Integer对象
反射机制
浮点型的比较
解决方法:
BigDecimal b1 = new BigDecimal(Float.toString(xx));
BigDecimal b2 = new BigDecimal(Float.toString(yy));
float ss = b1.subtract(b2).floatValue();
java 中浮点型的数值(float double这种)在进行相加相减或者比较的时候
会先转换成二进制即(E=M*R^K) 的形式, 由于小数的二进制表示 是不一定存在的
例如0.1 与0.25 用二进制表示 0.1是无线循环的二进制数 0.25则是0.01
然而在计算时候 会有一个舍去的策略。 所以导致最后结果会有偏差
例如1.0-0.9=0.10000000000000009
而在比较的时候
a=2.0 b=1.9
(a==b));
使用“Math.abs()”方法比较是否相等:" + (Math.abs(a-b)>0) );
使用“Math.abs()”方法比较是否相等(比较宽容的限制):" + (Math.abs(a-b)<0.00000001) );
比较大小“<”:" + (a<b));
比较大小“>”:" + (a>b));
执行结果:
-------使用“==”符号比较是否相等:true
-------使用“Math.abs()”方法比较是否相等:false
-------使用“Math.abs()”方法比较是否相等(比较宽容的限制):true
-------比较大小“<”:false
-------比较大小“>”:false
因此一般不会直接用“==”或者“!=”对两个浮点数进行比较。
判断两个浮点数float a 与 float b 是否相等可以根据他们的差的绝对值是否大于0来进行判断。
判断相等:
if(Math.abs(a-b)<=0){相等}
或者
if(!Math.abs(a-b)>0){相等}
判断不等:
if(Math.abs(a-b)>0){不相等}
字符串问题的一些处理
Character类里面一些实用的方法:
Character.isLetterOrDigit
Character.isLetter
Character.isDigit
判断一个字符时候为空白的字符isWhitespace()
判断一个字母是否为大写isUpperCase()
数据库
GC
socket
小细节
StringBuilder.replace(int start ,int end ,int val);
Integer.parseInt(String str , int radix);
Integer.to*String(int i);
Integer.toUnsignedString(int i , int shift(二进制位1 十六进制为4);
相等的细节
在LeetCode209题中,建立了两个Map 当用get方法比较时候 用了
if (map1.get(word[i]) != map2.get(strings[i]))
return false;
这个因为Map<Character,Integer> 所以get的是Integer对象 就算值相同 那也比较的是内存显然是不同的
所以解决方法如下 要么用两个int值接住 要么用equal方法
if (map1.get(word[i]).equals( map2.get(strings[i])))
return false;
int a= map1.get(word[i]);
int b = map2.get(strings[i)];
if(a!=b)
return false;
数组赋初值
如果把一组数组赋统一初值 不需要用for循环 用
Arrays.fill(name,val);