qqjianyue代码工

砌java代码
posts - 62, comments - 9, trackbacks - 0, articles - 10
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java 常考基础题

Posted on 2008-11-09 10:26 Qzi 阅读(314) 评论(0)  编辑  收藏 所属分类: java foundation
基本类型:
布尔类型:boolean不能够自动也不能强制转换成其他类型,但是可以进行&,&&,|,||运算
字符类型:char(16)其他基本类型不能够自动转变为字符类型,但可以强制转换为char,但是可以有截断现象
整形类型:byte(8),short(16),int(32),long(64)初始化的时候都是使用整数字面量直接赋值,但是byte与byte,short与short变量相加,默认都得到int的值,所以必须强制转换才能够返回原来类型的值(例如:(byte)(b1+b2))
浮点类型:float(32),double(64)浮点数的字面量默认都是double类型,所以需要强制转换成float才能够初始化float,或者加上f或F后缀。(例如float f1 = 1.4F或者float f1 = (float)1.4

整形还可以使用八进制(以0开头的整形数字字面量)、十六进制(以0x开头的整形字面量)初始化;
浮点型:字面量不可以是八进制十六进制,但int可以自动转化为浮点,所以仍然可以使用8进制16进制初始化,但是可以使用浮点计数法初始化,同样可以加上f或d后缀,例1.23e+33F等
字符型char可以直接使用

unicode转义符:
\uXXXX 四个16进制的数,在文本里面就是代表着某个字符,所以可以'\uXXXX'初始化一个char,可以\u0022\uXXXX\u0022初始化一个String,因为刚好\u0022代表双引号。当然\uXXXX不能是双引号,否则就编译出错了。

自动类型转换:byte---short---int---long---float---double
但是short与char不能够相互自动转换,但是可以相互强制转换
整型字面量可以初始化char,只要不超过65535的范围,也就是也能够使用8进制16进制初始化,但是整型变量不能够赋值给char;
char可以自动转换成int及以上

变量声明与定义:
int[] intArray;    //OK
int intArray[];    //OK
前面的加上 “= new int[变量or常量]” 都是可以的,但是“= new int(5)”是错误的
int[] intArray[];  //OK,但是代表的是数组的数组
int[5] intArray;  //False
int intArray[5];  //False

三目运算符:
?:返回不同类型问题,跟C++稍微不同,无论返回值在第一表达式还是第二表达式,返回值都是根据高阶类型返回,例子:
true ? 'a' : 9          返回结果是字符类型,所以字符类型是高阶类型
true ? 'a' : 9.0       返回结果是浮点类型(对于double和float都是),所以浮点比字符类型高阶
ture ? 9 : 9.0        返回结果是浮点类型,明显
true ? "abc" : 9     返回结果是字符串类型,因为字符类型较高阶
true ? 对象1实例 : 对象2实例      返回结果是最大共同父类,所以如果其中一个是另外一个的子类,那么就返回父类,如果互不继承关系,则返回Object。

String总结:
首先声明,==判断是判断对象引用的实例是否相同,即实例是否真正在相同的位置
Object默认的equals方法与==是一样的(就是引用相同实例),String类重写equals方法和hashCode方法,只要内容相同就返回ture(一般自己写的类也建议重写equals方法和hashCode方法)。所以这时候==与equals就具有不相同意义了。
http://www.javaeye.com/topic/122206
1. 首先String不属于8种基本数据类型,String是一个对象。
 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
2. new String()和new String("")都是申明一个新的空字符串,是空串不是null;
3. String str="string";
String str1="string";
String str2=new String ("string");
String str3="str" + new String("ing");
关于常量池概念,java虚拟机在常量池中只维持一个字符串的示例,所以str与str1引用都是引用常量池里面的共同实例,关键的是只有常量池里面的String才是唯一的,new空间里面的并不是。
但是str2,str3(而且str2与str3的空间地址也肯定不一样的,引用的是新建空间堆里的实例,所以str==str1,str!=str2,str1!=str2,str1!=str3,str2!=str3
但是它们几个使用equals都是返回true的,因为String类的hashCode函数根据内容返回hashCode码,这个码相同,则equals就返回true了,具体的equals与hashCode解释可以参照《java核心技术 卷1 基础知识》
注意:成员函数intern() :
当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;
所以:
String str1="string";
String str2=new String ("string");
str1==str2.intern()          返回true

只有注册用户登录后才能发表评论。


网站导航: