Java基本类型


2019-11-03  19:03:48  by冲冲

1、两个float型相减丢失精度,如何解决?

使用BigDemical装饰器模式

public class Test {
public static void main(String[] args) {
float a = 2.030944f;
float b = 1.001085f;
System.out.println(a - b);// 1.0298591 BigDecimal c = new BigDecimal(Float.toString(a));
BigDecimal d = new BigDecimal(Float.toString(b)); BigDecimal resultSub = c.subtract(d); //减法
BigDecimal resultAdd = resultSub.add(d); //加法
BigDecimal resultMul = c.multiply(d); //乘法
BigDecimal resultDiv = c.divide(d); //除法 System.out.println(resultSub.floatValue());//1.029859
System.out.println(resultAdd.floatValue());//2.030944
}
}

2、方法的值传递和对象传递

public class Test {
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
} public static void main(String args[]) {
String str = new String("good");
char[] ch = {'a', 'b', 'c'};
Test ex = new Test();
ex.change(str, ch);
System.out.print(str + " and " + ch); //good and gbc
}
}

3、Integer类的==和equals()

public class Test {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
Long h = 2L;
// 当Integer处于-128~127,使用内存栈创建值,并将对象指向该值;当不处于该区间,在堆重新new对象。
System.out.println(c == d); //true
System.out.println(e == f); //false
// 自动拆箱
System.out.println(c == (a + b)); //true
System.out.println(c.equals(a + b)); //true
// 包装类的equals()方法会使用instanceof判断类型
System.out.println(g == (a + b)); //true
System.out.println(g.equals(a + b)); //false
System.out.println(g.equals(a + h)); //true
}
}

4、==和equals()

public class Test {
public static void main(String[] args) {
Long u = 127L;
Long v = 127L;
System.out.println(u == v); //true
//[-128,127]在栈内存创建,并指向对象;其余的重新new对象
u = 128L;
v = 128L;
System.out.println(u == v); //false
String x = new String("hello");
String y = "hello";
System.out.println(x.equals(y)); //true
System.out.println(x == y); //false
x = x.intern();
System.out.println(x==y); //true
}

5、多线程的start()和run()

public class Test {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
//线程要使用start()开启,仅仅调用run()依然在本线程运行,输出结果是pongping
} private static void pong() {
System.out.print("pong");
}
}

6、switch

public class Test {
public static void main(String[] args) {
System.out.println(getValue(2));
//输出结果10
//如果case没有break,则会继续往下执行
} public static int getValue(int i) {
int Test = 0;
switch (i) {
default:
System.out.println("default");
case 1:
Test = Test + i;
case 2:
Test = Test + i * 2;
case 3:
Test = Test + i * 3;
}
return Test;
}
}

7、变量作用域

public class MeaningOfThis {
public final int value = 4; public void doIt() {
int value = 6;
Runnable r = new Runnable() {
public final int value = 5; public void run() {
int value = 10;
System.out.println(this.value);
}
};
r.run();
} public static void main(String... args) {
MeaningOfThis m = new MeaningOfThis();
m.doIt();
//输出结果5,因为this指向对象r
}
}

8、父类和子类的构造方法关系

如果没有给类创建一个构造方法,java编译器会自动添加一个没有参数且方法体为空的构造方法。如果已经人为地添加一个构造方法,java编译器就不会添加构造方法,但是子类构造器就必须显式调用该父类的人为构造方法。

class Person {
String name = "No name"; public Person(String nm) {
name = nm;
}
} class Employee extends Person {
String empID = "0000"; public Employee(String id) {
empID = id;
}
} public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
//编译报错
}
}

修改方案1

class Employee extends Person {
String empID = "0000"; public Employee(String id) {
super("Railway Employee"); //父类没有默认的空参构造器,所以必须调用带参构造器
empID = id;
}
}

修改方案2

class Person {
String name = "No name"; public Person(String nm) {
name = nm;
} public Person() {} //给父类添加不带参数的构造器,子类就可以隐式调用
}

9、基本数据类型溢出

public class Test {
public static void main(String[] args) {
int a = Integer.MAX_VALUE;
long b = a + 1;
System.out.println(a);//2147483647
System.out.println(b);//-2147483648
}
}

10、finally是否执行?

public class Test {
public static void main(String[] args) {
System.out.println(findResult()); //3
} public static int findResult(){
try {
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
}

11、溢出

public class Test {
public static void main(String[] args) {
byte b = 127;
b = (byte)(b+1);
System.out.println(b); //-128
}
}

12、+=

short s1 = 1;
s1 = s1+1; //s1+1得到int型的结果,同样是不能自动向下转换,编译报错
s1 += 1; //底层是 s1 = (short)s1 + 1;

【Java面试题】-- Java基本类型的更多相关文章

  1. [ Java面试题 ]Java 开发岗面试知识点解析

    如背景中介绍,作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向. 在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Jav ...

  2. Java面试题2--数据类型

    1. Java的数据类型? 2. Java的封装类型? 3. 基本类型和封装类型的区别? 基本类型只能按值传递,而对应的封装类是按引用传递的. 基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建 ...

  3. JAVA面试题——JAVA编程题1(2015.07.22——湛耀)

    实现代码很简单:   package com.xiaozan.shopping;   import java.util.Arrays;   public class ShoppingCart {    ...

  4. JAVA面试题——JAVA编程题1(2015.07.22)

    实现代码很简单:   package com.xiaozan.shopping;   import java.util.Arrays;   public class ShoppingCart {    ...

  5. Java面试题-Java中的锁

    1. 如何实现乐观锁(CAS)?如何避免ABA问题? 答:1)读取内存值的方式实现了乐观锁(比如:SVN系统),方法:第一,比较内存值和期望值:第二,替换内存值为要替换值.        2)带参数版 ...

  6. JAVA面试题——JAVA基础篇

    1.JAVA多态的实现方式:继承.重载.覆盖 2.JAVA有8种基本数据类型:byte.short.int.long.float.double.boolean.char 3.final.finally ...

  7. Java 面试题 —— java 源码

    1. 静态工厂方法 静态工厂方法不必在每次调用它们的时候都创建一个新的对象: Boolean.valueOf(boolean): public final class Boolean { public ...

  8. Java面试题-Java容器

    一.Java容器分类 Java容器划分为两个概念Collection.Map Collection: 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素,不关心是否重 ...

  9. java面试题-Java集合相关

    1. ArrayList 和 Vector 的区别 ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据 Vector是线程安全的,但是性能比ArrayList要低. Ar ...

  10. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络         投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...

随机推荐

  1. Java基础之(二):Notepad++实现HelloWorld

    现在我们开始编写我们的第一个程序:Hello World! HelloWorld 新建一个java文件 文件后缀名为.java Hello.java 代码分析: 接下来写完最大的框之后,那接下来当然就 ...

  2. MySQL灵魂拷问:36题带你面试通关!

    大家好,我是大彬~ 今天给大家分享MySQL常考的面试题,看看你们能答对多少. 本期MySQL面试题的目录如下: 事务的四大特性? 事务隔离级别有哪些? 索引 什么是索引? 索引的优缺点? 索引的作用 ...

  3. 使用YApi搭建API接口管理工具(docker安装)

    使用YApi搭建API接口管理工具(docker安装) 工具描述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布 ...

  4. scala基础篇 源码中 :_*的作用

    在scala源码中有大量的:_*,其作用是把Array.list转换为参数列表,作为变长参数传入参数列表 例子: def sumx(a:Int*)={ a.sum } val a=Range(1,9) ...

  5. STM32中操作寄存器GPIOB_CRL &= ~( 0x0F<< (4*0))与GPIOB_CRL &=~(0x0F)之间有什么区别吗?

    没有区别,作用相同.只是这样写便于修改和沿用. 对于只用到PB0端口的程序~(0x0f << (4*0)) 和~0x0f没有区别.0x0f <<(4*N) 就是 向左 移动N个 ...

  6. 【数据结构与算法Python版学习笔记】图——强连通分支

    互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可 ...

  7. BUAA_2020_软件工程_提问回顾与总结

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 提问回顾与总结作业要求 我在这个课程的目标 了解软件工程的技术,掌握工程化开发的能力 这个作业在哪 ...

  8. logstash处理多行日志-处理java堆栈日志

    logstash处理多行日志-处理java堆栈日志 一.背景 二.需求 三.实现思路 1.分析日志 2.实现,编写pipeline文件 四.注意事项 五.参考文档 一.背景 在我们的java程序中,经 ...

  9. [火星补锅] 水题大战Vol.2 T1 && luogu P1904 天际线 题解 (线段树)

    前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以 ...

  10. [CSP-S2021] 回文

    链接: P7915 题意: 给出一个长度为 \(2n\) 的序列 \(a\),其中 \(1\sim n\) 每个数出现了 2 次.有 L,R 两种操作分别是将 \(a\) 的开头或末尾元素加入到初始为 ...