java题库8

来源:互联网 发布:澳门网络运营商 编辑:程序博客网 时间:2024/05/07 16:35

1.

一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口就可以序列化

“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。
打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。
 

一个对象在一个JVM上序列化,可以在不同的JVM上反序列化

2.

Console =system.get

readline读取一行 console.readline();

3.

DateFormat df=DateFormat.getDateInstance();

df.setTime((1000*60*60*24)+d.getTime());

4.

1,equal 

           对于object类(或继承object类,但无实现自定义equal),是比较对象的类型的,除非同一对象,都不相等。 
            对于基本类型(如int)不能使用equal。 
          对于基本类型的封装类,equal是比较其类型 
           对于继承object类的,又实现了自定义equal(重写其equal),则是按自定义的equal执行,一般重写的就是重写成对其内容进行比较。一般api中继承object的类都已重写equal对内容进行比较。 
    int a = 3; 
    Integer d=3; 
   System.out.println(d.equals(a));    //true,因为其内容是相等的 
    System.out.println(a.equals(d));   //报错,因为基本类型int a没有equal这个方法 
2,== 
“==”比较两个变量本身的值,即两个对象在内存中的首地址。 
二次总结 
  1.“==”比较两个变量本身的值,即两个对象在内存中的首地址。 
    “equals()”比较字符串中所包含的内容是否相同。(StringBuffer 和StringBuilder特殊,==和equal都是比较地址) 
                StringBuilder ww = new StringBuilder("111"); 
StringBuilder qq = new StringBuilder("111"); 
System.out.println(ww == qq); // false 
System.out.println(ww.equals(qq))  // false 
2.基本数据类型:boolean、char、byte、shot、int、long、float、double等没有equal方法 


3.对于String ,基本类型的包装类型Boolean、Character、Byte、Shot、Integer、Long、Float、Double,适用1即==表比较地址,equal表示比较内容

介绍String的用法,请看下面的实例: 
public class TestEquals { 
public static void main(String[] args) { 
String s1 = "123"; 
String s2 = "123"; 
String s3 = "abc"; 
String s4 = new String("123"); 
String s5 = new String("123"); 
String s6 = new String("abc"); 


System.out.println(s1 == s2);//(1)true 
System.out.println(s1.equals(s2));//(2)true 
System.out.println(s1 == s3);//(3)flase 
System.out.println(s1.equals(s3));//(4)flase 


System.out.println(s4 == s5);//(5)flase 
System.out.println(s4.equals(s5));//(6)true 
System.out.println(s4 == s6);//(7)flase 
System.out.println(s4.equals(s6));//(8)flase 


System.out.println(s1 == s4);//(9)false 
System.out.println(s1.equals(s4));//(10)true 




答案解释:s1与s2分别指向由字符串常量”123” 创建的对象,在常量池中,只有一个对象,内容为123,有两个引用s1和s2指向这个对象,故这两个引用变量所指向的地址是相同的,因而(1)处的运行结果为true,又因为s1.equals(s2)是比较s1和s2所指向的对象的内容是否相等,而我们知道这两个对象的内容都是字符串常量”123”,故标记(2)处的运行结果是true。 
用同样的方法分析,s1和s3所指向的对象不一样,内容也不一样,故标记(3)和(4)处运行结果是false。 
再看看s4和s5,这两个引用变量所指向的对象的内容都是一样的(内容都是123),但是这两个对象是用new操作符创建处类的,是在内存中分配两块空间给这两个对象的,因而这两个对象的内存地址不一样,故事两个不同的对象,标记(5)处的s4 == s5 运行结果为false,但是内容一样,故标记(6)处的s4.equals(s5)运行结果为true。同理,s4和s6所指向的对象地址不同,内容也不相同。故标记(7)(8)处运行结果为false。 
s1和s4分别指向两个不同的对象(之所以这样称呼,是因为这两个对象在内存中的地址不相同,故而对象不相同),故标记为(9)处的s1 == s4运行结果为false,而标记为(10)处的s1.equals(s4)运行结果疑问:乍一看结果,有点惊讶,为什么不是true呢,不是说equals方法是比较内容的吗? 
解释:不错,如果在新类中被覆盖了equals方法,就可以用来比较内容的。但是在上面的例子中类Value并没有覆盖Object中的equals方法,而是继承了该方法,因此它就是被用来比较地址的,又v1和v2的所指向的对象不相同,故标记(1)处的v1.equals(v2)运行结果为false,标记为(2)处的v1 == v2运行结果也为false。 


java中Integer类为什么取值在-128-127内都引用同一内存地址

Integer i=127;
Integer j=127;
System.out.println(i==j);//返回true
Integer m=159;
Integer n=159;
System.out.println(m==n);//返回false

0 0