Difference in Null and Empty String
Hi,
I have been wondering about the difference between Null and Empty String in Java. So I wrote a small program like this:
public class CompareEmptyAndNullString {
public static void main(String args[]) {
String sNull = null;
String sEmpty = "";
try {
if (sNull.equalsIgnoreCase(sEmpty)) {
System.out.println("Null and Empty Strings are Equal");
} else {
System.out.println("Null and Empty Strings are Equal");
} catch (Exception e) {
e.printStackTrace();
This program throws Exception: java.lang.NullPointerException
at practice.programs.CompareEmptyAndNullString.main(CompareEmptyAndNullString.java:10)
Now if I change the IF Clause to if (sEmpty.equalsIgnoreCase(sNull)) then the Program outputs this: Null and Empty Strings are Equal
Can anyone explain why this would happen ?
Thanks in Advance !!
JavaProwler wrote:
Saish,
Whether you do any of the following code, the JUnit Test always passes: I mean he NOT Sign doesnt make a difference ...
assert (! "".equals(null));
assert ("".equals(null));
You probably have assertions turned off. Note the the assert keyword has nothing to do with JUnit tests.
I think that older versions of JUnit, before assert was a language keyword (which started in 1.4 or 1.5), had a method called assert. Thus, if you have old-style JUnit tests, they might still compile, but the behavior is completely different from what it was in JUnit, and has nothing to do with JUnit at all.
If you turn assertions on (-ea flag in the JVM command line, I think), the second one will throw AssertionError.
Similar Messages
-
VARCHAR2:: How to differnciate between NULL and empty string '' ?
Hello to all,
I'm looking for a possibility to differnciate between NULL and empty string '' in column of type VARCHAR2.
I have an application relying on that there is a difference between NULL and ''.
Is it possible to configure ORACLE in some way ?
Thanx in advance,
Thomastry check if a varchar variable has an empty string
by checking its lengthAnd that would accomplish what? But see for yourself:
DECLARE
v_test VARCHAR2(10);
BEGIN
v_test := '';
DBMS_OUTPUT.put_line(LENGTH(v_test));
v_test := NULL;
DBMS_OUTPUT.put_line(LENGTH(v_test));
END; C. -
Null and empty string not being the same in object?
Hello,
I know that null and empty string are interpreted the same in oracle.
However I discovered the strange behaviour concerning user defined objects:
create or replace
TYPE object AS OBJECT (
value VARCHAR2(2000)
declare
xml xmltype;
obj object;
begin
obj := object('abcd');
xml := xmltype(obj);
dbms_output.put_line(xml.getStringVal());
obj.value := '';
xml := xmltype(obj);
dbms_output.put_line(xml.getStringVal());
obj.value := null;
xml := xmltype(obj);
dbms_output.put_line(xml.getStringVal());
end;
When creating xml from object, all not-null fields are transformed into xml tag.
I supposed that obj.value being either '' or null will lead to the same result.
However this is output from Oracle 9i:
<OBJECT_ID><VALUE>abcd</VALUE></OBJECT_ID>
<OBJECT_ID><VALUE></VALUE></OBJECT_ID>
<OBJECT_ID/>
Oracle 10g behaves as expected:
<OBJECT><VALUE>abcd</VALUE></OBJECT>
<OBJECT/>
<OBJECT/>
However Oracle 9i behaviour leads me to the conclusion that oracle
must somehow distinguish between empty string and null in user defined objects...
Can someone clarify this behaviour?
Thus is it possible to test if object's field is empty or null?However Oracle 9i behaviour leads me to the conclusion that oracle
must somehow distinguish between empty string and null in user defined objects...
Can someone clarify this behaviour?
Thus is it possible to test if object's field is empty or null?A lot of "fixes" were done, relating to XML in 10g and the XML functionality of 9i was known to be buggy.
I think you can safely assume that null and empty strings are treated the same by Oracle regardless. If you're using anything less than 10g, it's not supported any more anyway, so upgrade. Don't rely on any assumptions that may appear due to bugs. -
More Fun with NULLs and Empty Strings
Greetings,
I ran across this behavior recently and thought I'd share with the forum. I'm running 10.2.0.2. Note the difference in behavior between passing and explicit NULL in the parameter vice passing an empty string (''):
CREATE OR REPLACE PROCEDURE NULL_ES_TEST(PARAM1 IN VARCHAR2) IS
VAR1 CHAR(1);
BEGIN
IF PARAM1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE('PARAM1 IS NULL');
END IF;
VAR1 := PARAM1;
IF VAR1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE('VAR1 IS NULL');
ELSE
DBMS_OUTPUT.PUT_LINE('VAR1 IS NOT NULL');
END IF;
DBMS_OUTPUT.PUT_LINE('THE LENGTH OF VAR1 IS '||TO_CHAR(LENGTH(VAR1)));
END NULL_ES_TEST;
EXEC NULL_ES_TEST(PARAM1 => '');
PARAM1 IS NULL
VAR1 IS NOT NULL
THE LENGTH OF VAR1 IS 1
(var1 now holds a single space)
EXEC NULL_ES_TEST(PARAM1 => NULL);
PARAM1 IS NULL
VAR1 IS NULL
THE LENGTH OF VAR1 IS
Any Comments or Insights are welcome.
Sincerely,
Dale WardWell somethings not as expected (tested on 10.2.0.3)
Even if you default the parameter to '', it treats null and '' differently.
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE PROCEDURE NULL_ES_TEST(PARAM1 IN VARCHAR2 := '') IS
2 VAR1 CHAR(1);
3 BEGIN
4 IF PARAM1 IS NULL THEN
5 DBMS_OUTPUT.PUT_LINE('PARAM1 IS NULL');
6 END IF;
7 VAR1 := PARAM1;
8 IF VAR1 IS NULL THEN
9 DBMS_OUTPUT.PUT_LINE('VAR1 IS NULL');
10 ELSE
11 DBMS_OUTPUT.PUT_LINE('VAR1 IS NOT NULL');
12 END IF;
13 DBMS_OUTPUT.PUT_LINE('THE LENGTH OF VAR1 IS '||TO_CHAR(LENGTH(VAR1)));
14* END NULL_ES_TEST;
SQL> /
Procedure created.
SQL> exec null_es_test(null);
PARAM1 IS NULL
VAR1 IS NULL
THE LENGTH OF VAR1 IS
PL/SQL procedure successfully completed.
SQL> exec null_es_test('');
PARAM1 IS NULL
VAR1 IS NOT NULL
THE LENGTH OF VAR1 IS 1
PL/SQL procedure successfully completed.
SQL> -
How to distinguish NULL and Empty Strings
Hi,
Just to set the context right; I'm an experienced C programmer trying labview for the first time. As such I ran in to a problem being that Labview has no concept of NULL-pointers and more specifically appears to have no concept of the difference between a NULL-string and an empty-string
I'm trying to make a structure (bundle) of strings (in it's most basic form key-value pairs) which i'd like to (for instance) URI encode in order to send it to a web server. For those who are not familiar with URI encoding; there is a distinguished difference between setting a key to an empty string and setting a key with no value. In C I would use a pointer to an empty string vs a NULL string pointer to symbolize this.
In essence I need an elegant way to distinguish between a defined but empty string and an undefined string (hmmm this is actually describing the same problem but now in terms of perl).
Anybody have any pointers (pun not intended) for me ?This is a bit depending on the interface you have with your encoder. The whole issue is that LV has no pointers at all (and you will like it, as you will never have any Null-Pointer exeptions and the like).
Assuming that you use a dll (so the Call Library node).
Use CString as input -> NULL-Terminated String.
Use I32 as input and pass 0 -> NULL string.
Felix
www.aescusoft.de
My latest community nugget on producer/consumer design
My current blog: A journey through uml -
Oracle, Null and empty Strings
Currently I'm facing problems with a class, which contains a String, which
is set to "" (empty String).
When the class is persistent, oracle writes null to the table column
(which seems to be common oracle behaviour) and when retrieving the class,
the field is set to null as well, giving me a lot of null-pointer
exceptions.
Anyway ... I can cope with that (just a lot of extra work)
far worse is the problem, wenn searching objects, that have this field set
to "" oder null.
Oracle can't find the records because JDO creates Querys "where
string=null" or "where string=''" , where oracle expects "where string is
null" to find the records.
Is there a workaround or solution ?Yeah, that would work as well, thx, but since I have to cope with
null-Strings now everywhere in my program, it doesn't hurt just to forbid
empty strings on the program side.
In future times I'll test on Oracle first, then porting to DB/2 - this way
I suppose work is far less to garant compability.
Nevertheless ... having to set the bankcode into quotes is a kodo bug in
my opinion.
Kodo knows the type of classfields (in this case string) and shouldn't
send the parameter as a BigDecimal to the database.
Given that, and having only bankcodes of null (only neccesary when using
Oracle), the method would look like:
public Collection getAccounts (String bankCode)
throws Exception
return getAccounts (Account.class, "bankcode=="+bankcode);
which is how a transparent persistent layer, um, should be , um , I mean
... just transparent ;-D
Marc Prud'hommeaux wrote:
Stefan-
Couldn't you just do something like:
public Collection getAccounts (String bankCode)
throws Exception
String filter;
if (bankCode == null || bankCode.length () == 0)
filter = "(bankCode == null || bankCode == "")";
else
filter = "bankCode == "" + bankCode + """;
return getAccounts (Account.class, filter);
If I understand the problem correctly, this should work for all the
databases.
In article <[email protected]>, Stefan wrote:
What operations are you performing to cause this SQL to be issued? You
say you are having trouble removing objects, but this is clearly not a
DELETE statement. Is this the SQL that is issued when looking up
objects by identity?I'm not removing objects, I was removing just quotes from parameters ;-)
A string column... is it also represented as a string field in your class?Yeah ... just to give you an impression of the code:
First we have a class, representing a bank account:
public class Account {
private AccountMgr myAccountMgr;
private String bankCode;
private String id;
Note, that in nearly all cases bankCode will be a number or null.
I have a second class "AccountMgr", which does all of the persistant stuff
(seaching, making persistent etc.)
This class has two methods, one versatile (protected) to retrieve accounts
by a given filterString and one who just returns accounts by bankCode,
building the expected filterstring. Here is my current working version:
public class AccountMgr {
public Collection getAccounts(String bankCode) throws Exception {
if (bankCode!=null) {
if (bankCode.equals("")) {
throw new Exception("check code, bankCode='' not allowed to get
same behavior from DB2 and Oracle");
// if set, quote the bankCode
bankCode="""+bankCode+""";
return getAccounts(Account.class,"bankCode=="+bankCode);
protected Collection getAccounts(Class accountClass, String filterAdd)
throws Exception {
PersistenceManager pm = MyHelper.getPersistenceManager();
String filter="";
if (filterAdd!=null && !filterAdd.trim().equals("")) {
filter+=filterAdd + " && ";
filter += "myAccountMgr==_accMgr";
Query query = pm.newQuery(accountClass, filter);
query.declareParameters("AccountMgr _accMgr");
return (Collection) query.execute(this);
As you can see, in the first method I have to set the bankCode into
quotes, when it's not null.
This is because otherwise a filter like "bankCode=1234" will be translated
in a way, where 1234 is send as a BigDecimal to the database:
[...] executing statement <4239745>: (SELECT [...] FROM JDO_ACCOUNT t0
WHERE t0.BANKCODE = ? : [reused=1;params={(BigDecimal) 1234}]
Marc Prud'hommeaux [email protected]
SolarMetric Inc. http://www.solarmetric.com -
Hi There,
As far as I know, Null is not the same as an empty string; however, when I try this out, I get some unexpected results (well, at least unexpected for my liking):
SQL> CREATE TABLE TS (MID NUMBER,
2 MDESC VARCHAR2(20) DEFAULT '' NOT NULL);
Table created.
SQL> INSERT INTO TS VALUES(1,'');
INSERT INTO TS VALUES(1,'')
ERROR at line 1:
ORA-01400: cannot insert NULL into ("TT"."TS"."MDESC")So, according to the above scenario, I can't insert an empty string!! However, an empty string is a valid string that doesn't have tuples/data!!
How come Oracle translates the null string '' as NULL?
ThanksWilliam Robertson wrote:
There is a special case to do with CHAR values, whereby '' counts as a string and so gets blank-padded, whereas NULL does not.Are you referring to:
SQL> DECLARE
2 flag CHAR(2);
3 PROCEDURE check_null (p_flag IN CHAR)
4 IS
5 BEGIN
6 IF p_flag = ' '
7 THEN
8 dbms_output.put_line ('flag is equal to '' ''');
9 ELSIF p_flag IS NULL
10 THEN
11 dbms_output.put_line ('flag is null');
12 ELSE
13 dbms_output.put_line ('other');
14 END IF;
15 END;
16 BEGIN
17 flag := '';
18 check_null (flag);
19 flag := NULL;
20 check_null (flag);
21 end;
22 /
flag is equal to ' '
flag is null
PL/SQL procedure successfully completed.
SQL> alter session set events '10932 trace name context forever, level 16384';
Session altered.
SQL> DECLARE
2 flag CHAR(2);
3 PROCEDURE check_null (p_flag IN CHAR)
4 IS
5 BEGIN
6 IF p_flag = ' '
7 THEN
8 dbms_output.put_line ('flag is equal to '' ''');
9 ELSIF p_flag IS NULL
10 THEN
11 dbms_output.put_line ('flag is null');
12 ELSE
13 dbms_output.put_line ('other');
14 END IF;
15 END;
16 BEGIN
17 flag := '';
18 check_null (flag);
19 flag := NULL;
20 check_null (flag);
21 end;
22 /
flag is null
flag is null
PL/SQL procedure successfully completed.
SQL> SY.
P.S. Don't ask me why normal (or at least consistent) behavior is not the default. -
I have an ODBC application whose backend has been changed from Access to Oracle. There is one particular query that is causing problems. The query contains a where clause with something like "field = ''" in it. This query is intended to pick up records where field is null. If the query was modified to "field is null," it would work. However, I cannot change the application.
Is there any way to configure the ODBC driver or something so that this query would work properly? I've tried defaulting the field to '', but Oracle is still treating it as null.
(What is really frustrating is that the application NEVER populates this field!)Actually, Oracle is very consistent in that it requires you to use ternary logic when dealing with null values. NULL is never equal to a value, NULL is never not equal to a value.
select * from someTable where column <> 'value'
will show you only those rows in someTable where column is non-NULL and where its value is not 'value'
select count(*) from someTable !=
select count(*) from someTable where column <> 'value' +
select count(*) from someTable where column = 'value'
select count(*) from someTable =
select count(*) from someTable where column <> 'value' +
select count(*) from someTable where column = 'value' +
select count(*) from someTable where column IS NULL
There are plenty of discussions in Oracle texts and in Oracle newsgroups that go into much greater detail about the how's & why's of this.
Justin -
What is difference between Null String and Empty String ?
Hi
Just i have little confusion that the difference bet'n NULL String and Empty String ..
Please clear my doubte.
ThankxFor the same reason I think it's okay to say "null
String" and "empty String "as long as you know they
really mean "null String reference" and "empty String
object" respectively. Crap. It's only okay to say that as long as *the one you're talking to" knows what it really means. Whether you know it or not is absolutely irrelevant. And there is hardly any ambiguity about the effects that a statement like "assign an object to a reference" brings. "Null String" differs in that way. -
Difference between null string and empty string??
what is the major difference between null string and an empty string??
I wrote the following simple program and I could see some different output.
Other than that, any other differences that we should pay attention to???
C:\>java TestCode
Hello
nullHello
public class TestCode
public static void main(String[] s)
{ String s1 = "";
String s2 = null;
System.out.println(s1 + "Hello");
System.out.println(s2 + "Hello");
}The difference is that an empty String is just empty but a null String has no value (i.e. it is not instantiated) this has signifigance since all Strings are objects.
-
What is the difference between String Constant and Empty String Constant
What is the difference between string constant which does not contain any value and the Empty string constant?
While testing a VI which contain a normal string constant in VI analyzer, it gives error to change string constant with the empty string constant?
Please Reply
prabhakant
Regards
Prabhakant PatilReadability.
Functionally, they are the same. From a coding standpoint, the Empty String Constant is unambiguous.
It is empty and will always be; good for initialization. Also, because you can not type a value into and Empty String Constant, someone would need to conciously replace it to set a 'default' value that is something other than NULL.
Now is the right time to use %^<%Y-%m-%dT%H:%M:%S%3uZ>T
If you don't hate time zones, you're not a real programmer.
"You are what you don't automate"
Inplaceness is synonymous with insidiousness -
Difference between Null and null?
What is the difference between null and NULL?
When is each used?
Thanks,veryConfused wrote:
There is a null in java, but no NULL. null means no value. However, when assigning value, the following is different:Although the empty String has no special role. Null means, the referential type is not assigned (doesn't refer) to a specific object. The empty String is just another object though, so seeing it or pointing it out as something special when it actually isn't at all (no more special than new Integer(0) or new Object[0]) just adds to the confusion. -
Check for null and empty - Arraylist
Hello all,
Can anyone tell me the best procedure to check for null and empty for an arraylist in a jsp using JSTL. I'm trying something like this;
<c:if test="${!empty sampleList}">
</c:if>
Help is greatly appreciated.
Thanks,
Greeshma...A null check might not be you best option. If your requirement is you must have both the date and time component supplied in order to populate EventDate, then I would use a Script Functoid that takes data and time as parameters.
In the C# method, first check if either is an empty string, if so return an empty string.
If not, TryParse the data, if successful, return a valid data string for EventDate. If not, error or return empty string, whichever satsifies the requirement. -
The parameter 'token' cannot be a null or empty string sharepoint
Hello ,
I am trying to create SharePoint 2013 web app for office 365 using visual studio 2012. when i debug and run the SharePoint custom web app then it show the error ("the parameter 'token' cannot be a null or empty string") in the
TokenHelper.cs file.
Please help me on urgent basis.
Mail me at : [email protected]
Here is the screenshot in the TokenHelper.cs file.
public static SharePointContextToken ReadAndValidateContextToken(string contextTokenString, string appHostName = null)
JsonWebSecurityTokenHandler tokenHandler = CreateJsonWebSecurityTokenHandler();
SecurityToken securityToken = tokenHandler.ReadToken(contextTokenString);
In this section i get that error.
JsonWebSecurityToken jsonToken = securityToken as JsonWebSecurityToken;you can go to <yoursiteurl>/_layouts/appregnew.aspx to create a new AppPrincipal, generating a client ID and client secret. Once generated, copy the client ID from that page into your app manifest and web.config.
http://msdn.microsoft.com/en-us/library/office/jj687469.aspx
Check the below two links
http://blogs.msdn.com/b/kaevans/archive/2013/04/05/inside-sharepoint-2013-oauth-context-tokens.aspx
http://msdn.microsoft.com/en-us/library/fp179932.aspx
My Blog- http://www.sharepoint-journey.com|
If a post answers your question, please click Mark As Answer on that post and Vote as Helpful -
SharePoint 2013 - The parameter 'token' cannot be a null or empty string
Hi all,
I am trying to create SharePoint 2013 web app for office 365 using visual studio 2012. when I run the SharePoint web
app then it show the error "the parameter 'token'
cannot be a null or empty string" in the TokenHelper.cs file.
this is the url i'm using:
$(function () {
$('#exportToExcelBtn').click(function () {
window.location = "https://xx.sharepoint.com/ENPages/_vti_bin/owssvr.dll?CS=109&Using=_layouts/query.iqy&List={803B55DA-B973-4EF4-92ED-F61DFD016D7C}&View={A6282A16-299E-407D-A25A-14E05AB23AE7}&CacheControl=1";
is it good?
I checked that key "clientID" and "cleantSecret" contains values.
what else can it be?in order to authenticate the app standard token should be submitted along with the url
check the below url
http://msdn.microsoft.com/en-us/library/office/jj163816(v=office.15).aspx
This combines five other tokens. It initially resolves to SPHostUrl={HostUrl}&SPAppWebUrl={AppWebUrl}&SPLanguage={Language}&SPClientTag={ClientTag}&SPProductNumber={ProductNumber}.
Then each of these tokens resolves. If there is no app web, the portion &SPAppWebUrl={AppWebUrl} is
not present.
Hope that helps|Amr Fouad|MCTS,MCPD sharePoint 2010
Maybe you are looking for
-
My .Mac site doesn't display in Safari
Hi There, My site hosted on .mac displays in Firefox (mac & pc) and IE v5 & v6 (pc) but will not display in Safari. The page usually loads blank, but if you click and drag down on the white page, the site appears? Site URL: www.svelte.net.nz Any help
-
No Index tab in generated Help
This seems like a really simple question so I apologize if I missed something, but I am using RoboHelp HTML X5.0.2 to generate Microsoft HTML Help. When I Generate Primary Layout, everything works fine and I am able to View the Result, but it only h
-
How to initialize a Type Object??
Hi, I have a procedure as below, which has type t_r_rep_data and a table having this type as record, but when I called this procedure, it has ORA-06530 error: Reference to uninitialized composite. Can you tell me how to initialize a type Object? Also
-
Dear Gurus, Please tell me how to eliminate the reverse entries from the reports. For example: If i had done a wrong entry for customer invoice & post that. Now the customer debit balance is showing Rs. 100000. Later on I want to reverse that. But af
-
Scaling a Custom Component? (pressing a button)
"To resize a custom component, edit the components content" Does that mean edit in Photoshop?? I can't find anywhere to scale the object. I have a button and I want it to scale down as I press it... I basically want an easy way to make an image into