2011年7月15日 星期五

StringBuilder append null in Java and C# test

今天檢查了一下StringBuilder對於附加null的處理做了個小實驗。

Java:
import java.util.Calendar;

public class main {
 public static void main(String[] args) {
  testStringBuilder();
 }

 public static void testStringBuilder() {
  StringBuilder sBuilder = new StringBuilder();
  
  System.out.println("1. string of new StringBuilder()");
  if(sBuilder == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder + "],length:[" + sBuilder.length() + "]");
  }
  
  StringBuilder sBuilder2 = new StringBuilder("");
  
  System.out.println("2. string of new StringBuilder(\"\")");
  if(sBuilder2 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder2 + "],length:[" + sBuilder2.length() + "]");
  }
  
  StringBuilder sBuilder3 = new StringBuilder();
  String nullString = null;
  sBuilder3.append(nullString);
  
  System.out.println("3. string of new StringBuilder() append null");
  if(sBuilder3 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder3 + "],length:[" + sBuilder3.length() + "]");
  }
  
  StringBuilder sBuilder4 = new StringBuilder("");
  sBuilder4.append(nullString);
  
  System.out.println("4. string of new StringBuilder(\"\") append null");
  if(sBuilder4 == null){
   System.out.println("string:[is null]");
  }else{
   System.out.println("result:string:[" + sBuilder4 + "],length:[" + sBuilder4.length() + "]");
  }
 }



結果:
1. string of new StringBuilder()
result:string:[],length:[0]
2. string of new StringBuilder("")
result:string:[],length:[0]
3. string of new StringBuilder() append null
result:string:[null],length:[4]
4. string of new StringBuilder("") append null
result:string:[null],length:[4]

C#:
using System;
using System.Text;

namespace test
{
 class Program
 {
  static void Main(string[] args) {
   StringBuilderTest();
  }

  public static void StringBuilderTest() {
   StringBuilder sBuilder = new StringBuilder();

   Console.WriteLine("1. string of new StringBuilder()");
   if(sBuilder == null) {
    Console.WriteLine("string:[is null]");
   } else {
    Console.WriteLine("result:string:[" + sBuilder + "],length:[" + sBuilder.Length + "]");
   }

   StringBuilder sBuilder2 = new StringBuilder("");

   Console.WriteLine("2. string of new StringBuilder(\"\")");
   if(sBuilder2 == null) {
    Console.WriteLine("string:[is null]");
   } else {
    Console.WriteLine("result:string:[" + sBuilder2 + "],length:[" + sBuilder2.Length + "]");
   }

   StringBuilder sBuilder3 = new StringBuilder();
   String nullString = null;
   sBuilder3.Append(nullString);

   Console.WriteLine("3. string of new StringBuilder() append null");
   if(sBuilder == null) {
    Console.WriteLine("string:[is null]");
   } else {
    Console.WriteLine("result:string:[" + sBuilder3 + "],length:[" + sBuilder3.Length + "]");
   }

   StringBuilder sBuilder4 = new StringBuilder("");
   sBuilder4.Append(nullString);

   Console.WriteLine("4. string of new StringBuilder(\"\") append null");
   if(sBuilder == null) {
    Console.WriteLine("string:[is null]");
   } else {
    Console.WriteLine("result:string:[" + sBuilder4 + "],length:[" + sBuilder4.Length + "]");
   }

  }

 }
}

結果:
1. string of new StringBuilder()
result:string:[],length:[0]
2. string of new StringBuilder("")
result:string:[],length:[0]
3. string of new StringBuilder() append null
result:string:[],length:[0]
4. string of new StringBuilder("") append null
result:string:[],length:[0]

Java與C#對於附加null的處理方式不同,Java會直接附加"null"字串,而C#則是附加空字串
難怪我寫Android的時候,字串長度有時候會怪怪的@@a

沒有留言: