- 浏览: 297787 次
- 性别:
- 来自: 杭州
博客专栏
-
Java面试
浏览量:0
文章分类
- 全部博客 (133)
- Struts2 (4)
- Hibernate (2)
- Spring (3)
- Java常识小积累 (18)
- Linux (6)
- Oscache (1)
- 面试技巧 (2)
- Eclipse (4)
- JavaScript (21)
- 生活 (7)
- Mysql (3)
- 网络优秀文章 (1)
- Freemaker (1)
- Tcp和UDP (1)
- ubuntu -java (1)
- Oracle (14)
- 重构 (1)
- webservice (4)
- Lucene (1)
- UML与OOA/D (1)
- 软件杂谈 (2)
- Nosql(Redis) (1)
- 团队开发 (1)
- Oracle 设计 (1)
- velocity (1)
- 面试那些事儿 (1)
- 技术 (1)
- 互联网 (1)
- 数据库 (1)
- jquery (1)
- java (2)
- fastjson (1)
- Remoting (1)
- 算法 (1)
- 学习技巧 (1)
- POI (3)
- FusionCharts (1)
- 学习资源 (1)
- 设计模式 (2)
- CSS (1)
- 技术边缘 (3)
- 生活感想 (0)
- JVM (1)
- JSON (0)
- 前端 (1)
- cxf (1)
- 分布式 (1)
- 阿萨德飞 (0)
- Java面试中的知识 (2)
- redis (1)
- 开发工具使用 (3)
最新评论
-
liushimiao0104:
请问下怎么删除word里面的图片呢
POI向word添加图片,表格 -
chpn:
addBatch确实可以1.这个和复合索引没得毛关系2.in查 ...
mysql 超1亿数据,优化分页查询 -
步青龙:
dagf113225 写道请问,这个mysql执行SQL的花费 ...
mysql 超1亿数据,优化分页查询 -
dagf113225:
请问,这个mysql执行SQL的花费的时间的工具叫什么?谢谢! ...
mysql 超1亿数据,优化分页查询 -
步青龙:
white_crucifix 写道我怎么觉得builder模式 ...
Builder设计模式
for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++);
1、内存分配:
共有五个地方来存储数据,分别是:
a.寄存器;
b.堆栈(stack):局部变量;
c.堆(heap):存放所有的Java对象;(编译器不需要知道存储的数据在堆里存活多长时间);
d.常量存储:常量值通常直接存放在程序代码的内部;
e.非RAM存储:
流对象:对象转化成字节流,通常被发送给另一台机器;
持久化对象:对象被存放于磁盘上。
2.特例:基本类型
创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中。
Java SE5的自动包装功能将自动地将基本类型转换为包装器类型(Character ch = 'x';)
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal
BigInteger:
BigInteger:支持任意精度的整数。
BigInteger(String val)
将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
BigInteger(String val, int radix)
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。
例如:
BigInteger bigInt = new BigInteger("11",2);
System.out.println("the big number is: " + bigInt);
结果显示:
the big number is: 3
BigDecimal:
BigDecimal:支持任何精度的定点数。
网上摘录技巧集:
1、当你在数据库里插入一条数据是6.00时,在显示时却是6.000000000000000000000。
解决方法:使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String(如果利用double作为参数的构造函数,无法精确构造一个BigDecimal对象),然后构造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。
即:
import java.math.BigDecimal;
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class Arith{ //默认除法运算精度
private static final int DEF_DIV_SCALE = 10; //这个类不能实例化
private Arith(){
}
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1,double v2){
//将传入的double转换为String
//如果利用double作为参数的构造函数,无法精确构造一个BigDecimal对象
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
//再将运算结果转换为double
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1,double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
};
2、因此,使用这个类BigDecimal,需要注意在构造方法中如果传入double,那么不能保证他的精确程度。
如:
BigDecimal bigDec = new BigDecimal(6.217);
BigDecimal bigDecAdd = new BigDecimal(6.3229); BigDecimal bigDecResult = bigDec.add(bigDecAdd); System.out.println("the big decimal is: " + bigDecResult);
结果却是:
the big decimal is: 12.53989999999999938040673441719263792037963867187500
但如果传入的是String类型,则:
the big decimal is: 12.5399
2:
Integer a = 127; Integer b = 127; Integer a2 = 128; Integer b2 = 128; System.out.println(a == b);// true System.out.println(a2 == b2);//false
后面的注释就是结果,为什么?请看源码
public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); }
看IntegerCache ,它是Integer的一个私有静态内部类,对Integer进行缓存处理
private static class IntegerCache { static final int high; static final Integer cache[]; static { final int low = -128; // high value may be configured by property int h = 127; if (integerCacheHighPropValue != null) { // Use Long.decode here to avoid invoking methods that // require Integer's autoboxing cache to be initialized int i = Long.decode(integerCacheHighPropValue).intValue(); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - -low); } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } private IntegerCache() {} }
所以我们进行对象比较时最好还是使用equals,便于按照自己的目的进行控制。
注意静态代码块的代码:
for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++);
由于cache[]在IntegerCache类中是静态数组,也就是只需要初始化一次,即static{......}部分,
顺便把chm版本的Thigking in Java传上来
- Think_in_Java_中文版_.zip (672.8 KB)
- 下载次数: 8
发表评论
-
双色球数据抓入Mysql
2013-04-12 18:45 17341 mysql5.1 创建表 -- 创建表 id,开 ... -
从零学Java-Java简介
2013-02-28 15:06 27Java的发展史可百度获得 从零学 ... -
疑难杂症-itext 横纵混编
2013-02-26 16:20 1330POI在word处理写的能力很差,所以不适合生成复杂 ... -
itext对word处理合并单元格,处理图片,文档结构图
2013-01-18 16:29 7841效果: 代码: package com.aa ... -
Java与Javascript 最近值
2013-01-16 14:55 1770Double price = 19.0000; ... -
Java数学运算中 电脑计算和人的思维模式的差别
2012-12-13 15:31 8大多数情况下还是人的思维模式下的运算要快点。 怪状1: ... -
重构的重要性大于架构
2012-12-01 20:58 1728此文仅仅是个人理解。 架构和重构从本质上讲 ... -
Excel 参照列并单元格算法
2012-08-28 10:02 1066题目需要做的有2个功能 1 根据一个字符串数组 求出连续且相 ... -
Java基础误区
2012-08-12 01:36 9891 import java.util.Date; ... -
BigDecimal
2012-07-02 14:37 1107BigDecimal a = new BigDec ... -
朝花夕拾,Java基础回顾
2011-11-15 09:48 1134byte 在编译的时候最大可以多大?为什么? 为什么成员变量 ... -
ubuntu安装java
2011-07-04 04:23 13601:下载jdk ,比如:jdk-6u26-linux-i586 ... -
TCP和UDP
2011-07-01 16:43 1173TCP: Server端 try { Serve ... -
面试-编程-质数
2011-06-22 02:15 1144第一种算法 public static boolea ... -
Refecting in Java
2011-06-02 11:33 1171反射这个东西项目中会用到,如果我有一个Navigatio ... -
博客设计
2011-03-11 12:02 1290设计一个可以承受大访问量的博客表,Mysql数据库。 ... -
静态内部类-静态变量-非静态内部类之间的访问权限
2011-01-10 16:27 34public class Test { //注意静态 ... -
代码规范约定
2010-12-17 10:34 32处理变量,方法,类的命名之外 1必要 ... -
Java基础特殊应用
2010-11-25 16:11 1456古老的代码,java代替goto,代码没有实际的意 ... -
地址图片上传服务器
2010-11-17 14:12 561: 普通的地址图片上传,只能上传普通的地址一般是后缀jpg, ...
相关推荐
作为JAVA程序员,应当保持好奇心和求知欲,不断探索新的技术栈和技术框架,如Spring Boot、MyBatis等。同时,也要关注计算机科学的基础理论,比如数据结构与算法、设计模式等,这些基础知识不仅能帮助我们更好地理解...
内部类是Java的一个特色,它可以被定义在一个类的内部,提供了一种封装和隐藏复杂性的手段。在这个游戏里,内部类可能用于表示游戏中的不同实体,如蛇、食物等。 4. **图形用户界面(GUI)**: 手机游戏通常会有一...
每个细胞单元统计其内部像素的梯度信息。 3. **方向梯度直方图**:在每个细胞单元内,计算像素的梯度方向,并构建一个直方图。通常使用9或16个方向。 4. **块归一化**:为了处理光照变化和局部阴影,将相邻的细胞...
《贪吃蛇游戏项目:全面探索面向对象编程》 贪吃蛇游戏,作为一个经典的小型游戏,它在编程教育中常常被用作实践面向对象编程(Object-Oriented Programming, OOP)理念的实例。这个完整的贪吃蛇项目,不仅包含了...
《在每场联赛比赛后通过锻炼联盟锻炼身体:探索Android应用开发的魅力》 "LeagueOfWorkout:在每场联赛比赛后通过锻炼联盟锻炼身体!"这个标题揭示了一个以运动和健康为主题的Android应用程序。这款应用旨在激励用户...
项目成员包括姚悦、仇思宇和钟婷,他们都是南京师范大学计算机科学与技术学院的在读学生,具备扎实的编程基础,熟悉C、C++、Java、Python等编程语言,有实际项目开发经验。指导教师王琼副教授,有丰富的教学和科研...
通过深入理解并正确配置其内部设置,用户能够显著提升工作效率和设计精度。本文将详细探讨Pro/E配置文件选项的重要性和具体设置方法,帮助读者实现个性化学习与工作流程优化。 #### 配置文件选项的重要性 配置文件...
"alarm-app-wakemeup-master"这个压缩包文件名暗示了这是项目源代码的主分支,意味着如果你对应用的内部机制感兴趣,可以下载并研究源码,学习如何利用Java来实现类似的功能,这对于Android开发者来说是一份宝贵的...
大脑作为人体中最复杂的器官之一,其内部结构和功能机制至今仍有许多未知之处。为了更好地理解和治疗各类脑疾病,以及促进神经机器人学、神经形态计算和人工智能的发展,科学家们不断探索新的方法和技术。本研究的...
Apache ActiveMQ是开源的、高性能的、功能丰富的消息中间件,它遵循JMS(Java Message Service)规范,为分布式系统提供了可靠的消息传递服务。ActiveMQ 5.7版本是其重要的一个里程碑,其中包含了丰富的功能和优化。...
内光电效应传感器(如光敏电阻、光电池)则是光能直接改变材料内部的电导率,产生电信号。 1.2 光电传感器的研究现状 近年来,随着科技的发展,光电传感器的研究方向主要集中在提高灵敏度、拓宽响应波段、降低暗...
通过此类活动,团队成员可以学会如何倾听他人意见,改善团队内部的沟通质量。 #### 8. 控制身体语言(Controlling Body Language) - **定义**:强调使用肢体语言来加强口头表达的重要性。 - **应用**:无论是面...