Java基础 小问题集合

1,char型变量中能不能存贮一个中文汉字?为何?  java

   char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,因此,char型变量中固然能够存储汉字啦。不过,若是某个特殊的汉字没有被包含在unicode编码字符集中,web

   那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,因此,char类型的变量也是占用两个字节。数组

2,自增自减问题缓存

int x = 4;
int y = (x++) + (++x) + (x*10); //5 + 5 + 60
自增自减操做在运算的后面,即a=a++;先运算(赋值)再自增自建
自增自建操做在运算的前面,即a=--a; 先自增自减再运算(赋值)

3,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?  安全

   对于short s1 = 1; s1 = s1 + 1; 因为s1+1运算时会自动提高表达式的类型,因此结果是int型,再赋值给short类型s1时,编译器报告须要强制转换类型的错误app

   对于short s1 = 1; s1 += 1;因为 += 是java语言规定的运算符,java编译器会对它进行特殊处理,所以能够正确编译。
ui

   正确的写法为:编码

s = (byte) (s+1);

4,强制转换的两种类型spa

float f = 12.3f;
long g = 12345;
f = g; //隐式转换
g = (long)f; //强制转换

5,byte越界问题,byte b = 130 及 byte b = 300是正确的吗线程

// byte b = 130;
//由于byte的范围是:-128到127。(-2^7--2^7-1), 而130不在此范围内,因此报错。
// 咱们可使用强制类型转换
byte b = (byte)(126 + 4);
System.out.println(b); //-126
byte b2 = (byte)300;
System.out.println(b2); //44

 获取130这个数据的二进制。 00000000 00000000 00000000 10000010 这是130的原码,也是反码,仍是补码。
 作截取操做,截成byte类型的了。 10000010 这个结果是补码。
已知补码求原码。

符号位 数值位
补码: 1 0000010
 反码: 1 0000001
 原码: 1 1111110

6,保留小数的两种方法

System.out.println(-10/3.0);
System.out.println( (float)Math.round( (-10/3.0) *1000 )/1000); //保留3为小数,Math.round
System.out.println(new DecimalFormat("0.00").format(-10/3.00)); //保留2位小数,DecimalFormat.format()

7,求值-3 % 5

System.out.println(-3 % 5);//-3

8,不引入第3个值或者变量,交换2个数据的值

int x = 10;int y = 5;
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 y = 10
x = x ^ y; // 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);

9,最高效的计算出2的3次方

System.out.println(2<<3);
将一个数左移n位,就至关于乘以了2的n次方,那么,一个数乘以8只要将其左移3位便可,而位运算cpu直接支持的,效率最高

10,"=="和equal的区别

     ”==“ 操做符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操做符。

     若是一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象自己占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另外一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,若是要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就须要用==操做符进行比较。

     equals方法是用于比较两个独立对象的内容是否相同,就比如去比较两我的的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

String a=new String("foo");

String b=new String("foo");

     两条new语句建立了两个对象,而后用a,b这两个变量分别指向了其中一个对象,这是两个不一样的对象,它们的首地址是不一样的,即a和b中存储的数值是不相同的,因此,表达式a==b将返回false,而这两个对象中的内容是相同的,因此,表达式a.equals(b)将返回true。记住,字符串的比较基本上都是使用equals方法

11,Integerint的区别

    int是java提供的8种原始数据类型之一。Java为每一个原始类型提供了封装类,Integer是java为int提供的封装类。

    int的默认值为0,而Integer的默认值为null,即Integer能够区分出未赋值和值为0的区别,int则没法表达出未赋值的状况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

JSP开发中,Integer的默认为null,因此用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0, 因此用el表达式在文本框中显示时,结果为0,int不适合做为web层的表单数据的类型。

     在Hibernate中,若是将OID定义为Integer类型,那么Hibernate就能够根据其值是否为null而判断一个对象是不是临时的,若是将OID定义为了int类型,还须要在hbm映射文件中设置其unsaved-value属性为0。

     另外,Integer提供了多个与整数相关的操做方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

 

12,字符串与其余类型之间的转换

其它类型向字符串转换:

  •  调用类的串转换方法:X.toString();
  •  自动转换:X+"";
  •  使用String的方法:String.valueOf(X)

字符串转换为其余类型:

  •  先在转换成响应的实例,再调用对应的方法转换:new Float("32.1").doubleValue(),也能够用Double.ValueOf("32.1").doubleValue()
  • Character的getNumericValue(char ch)方法

  • 静态parseXXX方法
1 String s = "1"; 2 byte b = Byte.parseByte( s ); 3 short t = Short.parseShort( s ); 4 int i = Integer.parseInt( s ); 5 long l = Long.parseLong( s ); 6 Float f = Float.parseFloat( s ); 7 Double d = Double.parseDouble( s );

 

13,Date类型与其余类型之间的转换     

 

import java.text.SimpleDateFormat; java.util.Date date = new java.util.Date(); //若是但愿获得YYYYMMDD的格式
SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMdd"); String dateFormat=sy1.format(date); //若是但愿分开获得年,月,日
SimpleDateFormat sy=new SimpleDateFormat("yyyy"); SimpleDateFormat sm=new SimpleDateFormat("MM"); SimpleDateFormat sd=new SimpleDateFormat("dd"); String syear=sy.format(date); String smon=sm.format(date); String sday=sd.format(date);

 

 14,null+"hello"=nullhello?

 

String s = null; s += "hello"; System.out.println(s); // 输出 nullhello

缘由:先应用 String.valueOf 得出 s 的 value 值,再经过 StringBuilder 拼接 hello,所以将 value 与 hello 进行了拼接。                   
String s = null; s = (new StringBuilder(String.valueOf(s))).append("hello").toString(); System.out.println(s);
 
13,非new生成的interger对象进行比较的时候,会对-128到127之间的数据进行缓存,注意==和.equal
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true

Integer a1 = 1000;
Integer b1 = 1000;
System.out.println(a1 == b1); // false
System.out.println(a1.equals(b1)); // true

java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了
对于两个非new生成的Integer对象,进行比较时,若是两个变量再-128到127之间,则比较的结果为true,不然为false。

13,length(),length,size()求长度
  • length() 方法是针对字符串来讲的,要求一个字符串的长度就要用到它的length()方法;
  • length 属性是针对 Java 中的数组来讲的,要求数组的长度能够用其 length 属性;
  • Java 中的 size() 方法是针对泛型集合说的, 若是想看这个泛型有多少个元素, 就调用此方法来查看!
String []list={"ma","cao","yuan"}; String a="macaoyuan"; System.out.println(list.length);//3
System.out.println(a.length());//9
List array=new ArrayList(); array.add(a); array.add(a); System.out.println(array.size());//2

14,String,StringBuffer,StringBuilder

  String 长度大小不可变

  StringBuffer 和 StringBuilder 长度可变

  StringBuffer 线程安全 StringBuilder 线程不安全

  StringBuilder 速度快

 1         StringBuffer sBuffer = new StringBuffer("菜鸟教程官网:");  2         System.out.println(sBuffer.length());//7
 3         sBuffer.append("www");  4         sBuffer.append(".runoob");  5         sBuffer.append(".com");  6         System.out.println(sBuffer);//菜鸟教程官网:www.runoob.com
 7         System.out.println(sBuffer.length());//21
 8 
 9         String s = "菜鸟教程官网:"; 10         System.out.println(s.length());//7
11         String s1 = s.concat("www"); 12         String s2  = s1.concat(".runoob"); 13         String s3  = s2.concat(".com"); 14  System.out.println(s); 15         System.out.println(s.length());//7
16  System.out.println(s3); 17         System.out.println(s3.length());//21

 

15,对一个指定长度的数组扩容
int[] a= {10,20,30,40,50}; a= Arrays.copyOf(a,a.length+10);
长度加上10,默认补0

16,int[] arr={'a',25,45,79,'z'},存储在该数组的数据是不是同一数据类型

  存放进去的 char 类型的字符会自动转为 int 类型的 ASCII 码。上面的代码中就将 a 转成了 97,z 转成了 122。

  因此数组只能存放同一类型的数据。

相关文章
相关标签/搜索