面试:Java 基本类型与运算

1. Java 提供哪几种基本类型

8 种原始的数据类型:

以上这些基本类型可以分为如下4种类型:

  1. int 长度数据类型: byte(8bit)、 short(16bit)、int(32bit)、long(64bit)。

  2. float长度数据类型:单精度(32 bit float)、双精度(64 bit double)。

  3. boolean类型变量的取值: ture、false

  4. char数据类型 unicode 字符(16bit)。

另外有一点要注意:


float n = 1.0; // 会报错

float n = 1.0f; // 正确

float n = (float)1.0 // 正确

由于 Java 中默认的小数是 double 的,而 高精度转低精度不能隐式转换。

同理,Java 中默认整型是 int 的,所以 long l = 26012402244L 要这样写。

在Java语言中null值是什么?在内存中 null 是什么?

null不是一个合法的 Object 实例,所以编译器并没有为其分配内存,它仅仅用于表明该引用目前没有指向任何对象。其实,与C语言类似,null是将引用变量的值全部置0。

2. 什么是不可变类

不可变类( immutable class)是指当创建了这个类的实例后,就不允许修改它的值了,也

就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。它有点类似于常量( const),即只允许别的程序读,不允许别的程序进行修改。

在Java类库中,所有基本类型的包装类都是不可变类,例如 IntegerFloat等。此外,String也是不可变类

“+=” 实际上是创建了一个新的对象,原来那个字符串常量 “Hello” 还在内存中,没有被改变。

一个不可变类要遵循的 4 条原则:

除此之外,还有一些小的注意事项:由于类的不可变性,在创建对象时就需要初始化所有成员变量,因此最好提供一个带参数的构造函数来初始化这些成员变量

3. 值传递与引用传递有哪些区别

4. 不同数据类型的转换规则

在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类

型转换,转换的规则为:从低精度向高精度转换,即优先级满足byte< short< char< int< long< float< double,例如,不同数据类型的值在进行运算时, short类型数据能够自动转为 int类型,int类型数据能够自动转换为foat类型等。反之,则需要通过强制类型转换来实现。

byte、char、shot 类型的数据在参与运算时会自动转换为it型,但当使用“+=”运

算时,就不会产生类型的转换(将在下一节中详细介绍)。

在 Java 中,基本类型和 boolean 是不能相互转换的

总之,当有多种类型的数据混合运算时,系统会先自动地将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

当需要从高级数据类型转换为低级数据类型时,就需要进行强制类型转换。

5. 强制类型转换的注意事项

Jaa语言在涉及byteshortchar类型的运算时,首先会把这些类型的变量值强制转换为int类型,然后对int类型的值进行计算,最后得到的值也是int类型。因此,如果把两个short类型的值相加,最后得到的结果是int类型;

如果把两个byte类型的值相加,最后也会得到一个int类型的值。如果需要得到 short类型的结果,就必须显式地把运算结果转换为 short 类型,例如对于语句 short s1=1;s1=s1+1,由于在运行时会首先将 s1 转换成int类型,因此s1+1的结果为int类型,这样编译器会报错,所以,正确的写法应该 short s1=1; s1=(short)(s1+1)

有一种例外情况。“+=”为Java语言规定的运算法,Java编译器会对其进行特殊处理,因此,语句short s1=1; s1+=1能够编译通过。

6. 运算符的优先级

7. Math 类中 round、ceil、floor 方法的功能是什么

8. ++i 和 i++ 的区别

9. 实现无符号数右移操作

10. char 变量是否可以存储中文汉字

可以,charutf16

中文字符每个字符占 2B,英文字符每个字符占 1B

判断字符串汇总是包含中文字符: