练习/面试题
short s=1; s=s+1; 自然是编译不通过的 提示损失精度 ;
short s=1; s+=1; 能编译通过
隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换。
s+=1的意思与s=s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换所以将一个int类型赋给short就会出错,
而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),就是 s+=1 <=> s = (s的类型)(s+1)。
Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。Char储存的是一个字符(两个字节),中文也是占的两个字节;所以,Java中的字符可以存储一个中文汉字
Java中的工具类可以直接调用(不用new对象,创建实例)
一般在Math.max()里面。。用Math能直接去调用max(),是因为max()是属于Math里面的一个静态方法。也就是用static来修饰的。。如果一个类里面的方法是属于静态的。那么在调用这个方法的时候就不需要创建一个实例的对象。而是用类名去直接调用了。因为静态函数在程序启动的时候就已经为它单独的创立了一个内存空间
java中==跟equlas有什么区别
1. == 是一种运算,比较两个数据内存地址是否相同。
2. equals 是Object类的方法,如果没有被覆盖,默认是比较两个数据值是否一样,不比较内存地址。
比如
Object A=new Object();
Object B=A;
A==B ==>false
A.equals(B) ==>true
在JAVA里面,牵扯到equals和equalsIgnoreCase比较字符串的功能函数,前者比较的时候区分大小写,后者比较时忽略大小写。
实现两个整数变量的交换
注意:没有明确指定数据的类型,默认int类型。
class OperatorTest {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量(开发中用的)
/*
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");
*/
//方式2:用位异或实现(面试用)
//左边:a,b,a
//右边:a ^ b
/*
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
*/
//方式3:用变量相加的做法
/*
a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);
*/
//方式4:一句话搞定
b = (a+b) - (a=b); //b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);
}
}