zoukankan      html  css  js  c++  java
  • Java小知识


    java保留两位小数方法
    1> BigDecimal 方法


          double f = 11.3156;
          BigDecimal b = new BigDecimal(f);
          f = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();

    2> DecimalFormat 格式化
         

          double f=2.23412;
          System.out.println(new DecimalFormat("#.00").format(f));

    DecimalFormat format 方法
    格式中的'0'和'#'的区别
    eg:
    1:new DecimalFormat("00.000").format(pi) //结果:03.142
    2:new DecimalFormat("##.###").format(pi) //结果:3.142
    都是对pi进行格式化,但第一个的结果是03.142,第二个的结果是3.142。
    0和#都是占位符,但在不同的地方,作用不一样。下面对他们做了具体的比较。
    0:
    比实际数字的位数多,不足的地方用0补上。
    new DecimalFormat("00.00").format(3.14) //结果:03.14
    new DecimalFormat("0.000").format(3.14) //结果: 3.140
    new DecimalFormat("00.000").format(3.14) //结果:03.140
    比实际数字的位数少:整数部分不改动,小数部分,四舍五入
    new DecimalFormat("0.000").format(13.146) //结果:13.146
    new DecimalFormat("00.00").format(13.146) //结果:13.15
    new DecimalFormat("0.00").format(13.146) //结果:13.15
    #:
    比实际数字的位数多,不变。
    new DecimalFormat("##.##").format(3.14) //结果:3.14
    new DecimalFormat("#.###").format(3.14) //结果: 3.14
    new DecimalFormat("##.###").format(3.14) //结果:3.14
    比实际数字的位数少:整数部分不改动,小数部分,四舍五入
    new DecimalFormat("#.###").format(13.146) //结果:13.146
    new DecimalFormat("##.##").format(13.146) //结果:13.15
    new DecimalFormat("#.##").format(13.146) //结果:13.15


    3> String 方法


      double f = 11.3156;
          String s = String .format("%.2f",f);
          f = Double.valueOf(s);

         System.out.println(f);

    short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
    答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。
    而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

    用最有效率的方法计算2乘以8?
    答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
    解析:java中有三种移位运算符:
    << : 左移运算符,num << 1,相当于num乘以2
    >> : 右移运算符,num >> 1,相当于num除以2
    >>> : 无符号右移,忽略符号位,空位都以0补齐

    String和StringBuilder、StringBuffer的区别?
    答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。
    其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。
    StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

    String和StringBuilder、StringBuffer的区别?
    答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。
    其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。
    而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

    什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?
    答:如果使用少量的字符串操作,使用 (+运算符)连接字符串;
    如果频繁的对大量字符串进行操作,则使用
    1:全局变量或者需要多线程支持则使用StringBuffer;
    2:局部变量或者单线程不涉及线程安全则使有StringBuilder。
    补充:String对象的intern方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用。

  • 相关阅读:
    System lock
    skip_slave_start
    慢查询日志分析
    wait_timeout 、interactive_timeout、slave_net_timeout、master_heartbeat_period
    reset slave,reset slave all,reset master都干了些啥?
    强制删除有外键约束的数据
    集群拓扑结构变更
    在线开启gtid与在线关闭gtid
    less
    pg流复制
  • 原文地址:https://www.cnblogs.com/wyu1258/p/8688112.html
Copyright © 2011-2022 走看看