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. css3新增属性-background背景

    css3新增属性 边框属性 背景属性 文字属性 颜色属性 背景属性 属性 说明 background-image 添加背景图片 background-size 指定背景图像的大小 background ...

  2. Java初步学习——2021.10.11每日总结,第六周周一

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天继续学习菜鸟教程Java实例 字符串 9.字符串小写转大写--toUpperCase方法 public class Ma ...

  3. 题解 Hero meet devil

    题目传送门 题目大意 给出一个长度为 \(n\) 的字符串,对于每个 \(k\in [0,n]\),求出有多少个长度为 \(m\) 的字符串满足两者最长公共子序列长度为 \(k\). \(n\le 1 ...

  4. PTA实验11-1-7 藏头诗 (15分)

    实验11-1-7 藏头诗 (15分) 本题要求编写一个解密藏头诗的程序. 输入格式: 输入为一首中文藏头诗,一共四句,每句一行.注意:一个汉字占两个字节. 输出格式: 取出每句的第一个汉字并连接在一起 ...

  5. IT行业供应过剩?“减负路线”助你成为人人都想要的抢手开发

    开发者的IT技能:良莠不齐,优秀的软件开发人员在招聘时往往可遇不可求.包括国家统计局在内的多家权威机构的报告提示,在数字化转型的浪潮下,市场对于软件开发人员的需求数量已经远远地超过现有开发者群体的数量 ...

  6. Java:修饰符小记

    Java:修饰符小记 对 Java 中的 修饰符,做一个微不足道的小小小小记 Java 语言提供了很多修饰符,大概分为两类: 访问权限修饰符 非访问权限修饰符 访问权限修饰符 修饰符 说明 publi ...

  7. [对对子队]会议记录4.15(Scrum Meeting 6)

    今天已完成的工作 何瑞 ​ 工作内容:制作了合成指南 ​ 相关issue:实现游戏内UI界面使用的组件 马嘉 ​ 工作内容:基本实现了箱子内物品列表 ​ 相关issue:实现游戏内UI界面使用的组件 ...

  8. 2021.8.17考试总结[NOIP42]

    $\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ 有了打地鼠的前车之鉴,我深信树规板子是可以出现在联赛题里的. 所以T1十分钟码完直接溜了,后 ...

  9. DP接口中AUX

    背景技术: DP接口(DisplayPort)是一种图像显示接口,它不仅可以支持全高清显示分辨率(1920×1080),还能支持4k分辨率(3840×2160),以及最新的8k分辨率(7680×432 ...

  10. 用STM32内置的高速ADC实现简易示波器

    做一个数字采样示波器一直是我长久以来的愿望,不过毕竟这个目标难度比较大,涉及的方面实在太多,模拟前端电路.高速ADC.单片机.CPLD/FPGA.通讯.上位机程序.数据处理等等,不是一下子就能成的,慢 ...