Java中 单引号 数字判断相等 StringBuilder

单引号和双引号输出的区别

  • 区别1:java中的单引号表示字符,java中的双引号是字符串。
  • 区别2:单引号引的数据一般是char类型的;双引号引的数据 是String类型的
  • 区别3:java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用charAt(n) 来获取第几个字符。

char定义时用单引号,只能有一个字母,数字。char c='c';而String用双引号,可以是一个,也可能是多个字母,汉字等。就是所谓的字符串。String s="adsaf";
char只是一个基本类型,而String 可以是一个类,可以直接引用。比如char c='c';不能直接对c调用方法。String s="abc"; 这时可以调用s.charAt(0);等方法,因为String是类,这是就是对象的调用了。

错误示例

if (string.equals('是')) {
    String.format("数字的正负表示:%+d %d %+d %d",8,8,-8,-8);
}

equals() 会判断大小写区别,equalsIgnoreCase() 不会判断大小写区别

StringBuilder重用 清空数据方法

在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作。StringBuffer:线程安全的

public class Buffer {

  public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    sb.append("1111\n");
    sb.append("222\n");
    System.out.println(sb.toString());
    sb.setLength(0); //清空
    sb.append("5555\n");
    System.out.println(sb.toString());
  }
}

Java Integer/Long类型是否相等

Integer/Long类型的值在-128到127之间会使用缓存,超过就会创建一个对象,所以使用==判断两个值是相等的也会false。若没有超过这个范围,使用==也是可以进行判断的。

  • 推荐用equals(),这个还可以避免一些空指针问题的出现
  • 使用Integer.intValue();这样出来的就是int值,就可以直接比较了(可能会抛出空指针异常);
  • 使用Integer.longValue();这样出来的就是long值,就可以直接比较了(可能会抛出空指针异常);
Long a = 400l;
Long b = 400l;
System.out.println(a.longValue() == b.longValue());

Integer a = 400;
Integer b = 400;
System.out.println(a.intValue()== b.intValue());

两个浮点数是否相等

不论是float还是double都是浮点数,计算机是二进制,浮点数会失去一定的精确度。

 /**
  *  两个浮点数直接判断
  */
double value1 = 0.9 - 0.8;
double value2 = 0.8 - 0.7;
System.out.println(value1 == value2); // false

/**
* 用BigDecimal判断两个浮点数是否相等-compareTo
* 两个值相等,则返回值为0,否则返回值为-1
*/
BigDecimal bigDecimalValue1 = BigDecimal.valueOf(0.9).subtract(BigDecimal.valueOf(0.8));
BigDecimal bigDecimalValue2 = BigDecimal.valueOf(0.8).subtract(BigDecimal.valueOf(0.7));
System.out.println(bigDecimalValue1.compareTo(bigDecimalValue2));

#保留2位小数
String.format("%.2f", "0.3265");

浮点数保留指定小数位

public class NumberUtil {

  /**
   * 将浮点数格式化保留digit位小数点。
   *
   * @param number 待格式化的浮点数。
   * @param digit  保留的小数点位数。
   * @return 格式化后的字符串。
   */
  public static String floatFormat(Double number, Integer digit) {
    NumberFormat format = NumberFormat.getNumberInstance();
    format.setMaximumFractionDigits(digit); // 设置小数点最大位数
    format.setRoundingMode(RoundingMode.UP); // 设置四舍五入模式
    return format.format(number);
  }

  /**
   * 浮点数精度相加,保留digit位小数点。
   *
   * @param a     加数a。
   * @param b     加数b。
   * @param digit 保留的小数点位数。
   * @return 相加结果的字符串表示。
   */
  public static String floatAdd(Double a, Double b, Integer digit) {
    return performOperation(a, b, BigDecimal::add, digit);
  }

  /**
   * 浮点数精度减法,保留digit位小数点。
   *
   * @param a     被减数。
   * @param b     减数。
   * @param digit 保留的小数点位数。
   * @return 减法结果的字符串表示。
   */
  public static String floatMinus(Double a, Double b, Integer digit) {
    return performOperation(a, b, BigDecimal::subtract, digit);
  }

  /**
   * 浮点数精度乘法,保留digit位小数点。
   *
   * @param a     因子a。
   * @param b     因子b。
   * @param digit 保留的小数点位数。
   * @return 乘法结果的字符串表示。
   */
  public static String floatMul(Double a, Double b, Integer digit) {
    return performOperation(a, b, BigDecimal::multiply, digit);
  }

  /**
   * 浮点数精度除法,保留digit位小数点。
   *
   * @param a     被除数。
   * @param b     除数。
   * @param digit 保留的小数点位数。
   * @return 除法结果的字符串表示。
   */
  public static String floatDiv(Double a, Double b, Integer digit) {
    try {
      BigDecimal num1 = new BigDecimal(a.toString());
      BigDecimal num2 = new BigDecimal(b.toString());
      BigDecimal result = num1.divide(num2, digit, RoundingMode.HALF_UP); // 精确除法,四舍五入
      return formatResult(result, digit);
    } catch (ArithmeticException e) {
      // 处理除数为0的情况
      throw new IllegalArgumentException("除数不能为0");
    }
  }

  // 提取重复的计算逻辑到一个私有方法中
  private static String performOperation(Double a, Double b, BigDecimalOperation operation,
      Integer digit) {
    BigDecimal num1 = new BigDecimal(a.toString());
    BigDecimal num2 = new BigDecimal(b.toString());
    BigDecimal result = operation.apply(num1, num2);
    return formatResult(result, digit);
  }

  // 提取重复的结果格式化逻辑
  private static String formatResult(BigDecimal result, Integer digit) {
    return String.format("%." + digit + "f", result);
  }

  // 接口,用于逻辑抽象
  interface BigDecimalOperation {
    BigDecimal apply(BigDecimal num1, BigDecimal num2);
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值