1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package java.lang; 19 20import java.io.Serializable; 21 22/** 23 * The wrapper for the primitive type {@code boolean}. 24 * 25 * @since 1.0 26 */ 27public final class Boolean implements Serializable, Comparable<Boolean> { 28 29 private static final long serialVersionUID = -3665804199014368530L; 30 31 /** 32 * The boolean value of the receiver. 33 */ 34 private final boolean value; 35 36 /** 37 * The {@link Class} object that represents the primitive type {@code 38 * boolean}. 39 */ 40 @SuppressWarnings("unchecked") 41 public static final Class<Boolean> TYPE 42 = (Class<Boolean>) boolean[].class.getComponentType(); 43 // Note: Boolean.TYPE can't be set to "boolean.class", since *that* is 44 // defined to be "java.lang.Boolean.TYPE"; 45 46 /** 47 * The {@code Boolean} object that represents the primitive value 48 * {@code true}. 49 */ 50 public static final Boolean TRUE = new Boolean(true); 51 52 /** 53 * The {@code Boolean} object that represents the primitive value 54 * {@code false}. 55 */ 56 public static final Boolean FALSE = new Boolean(false); 57 58 /** 59 * Constructs a new {@code Boolean} with its boolean value specified by 60 * {@code string}. If {@code string} is not {@code null} and is equal to 61 * "true" using a non-case sensitive comparison, the result will be a 62 * Boolean representing the primitive value {@code true}, otherwise it will 63 * be a Boolean representing the primitive value {@code false}. 64 * 65 * @param string 66 * the string representing a boolean value. 67 */ 68 public Boolean(String string) { 69 this(parseBoolean(string)); 70 } 71 72 /** 73 * Constructs a new {@code Boolean} with the specified primitive boolean 74 * value. 75 * 76 * @param value 77 * the primitive boolean value, {@code true} or {@code false}. 78 */ 79 public Boolean(boolean value) { 80 this.value = value; 81 } 82 83 /** 84 * Gets the primitive value of this boolean, either {@code true} or 85 * {@code false}. 86 * 87 * @return this object's primitive value, {@code true} or {@code false}. 88 */ 89 public boolean booleanValue() { 90 return value; 91 } 92 93 /** 94 * Compares this instance with the specified object and indicates if they 95 * are equal. In order to be equal, {@code o} must be an instance of 96 * {@code Boolean} and have the same boolean value as this object. 97 * 98 * @param o 99 * the object to compare this boolean with. 100 * @return {@code true} if the specified object is equal to this 101 * {@code Boolean}; {@code false} otherwise. 102 */ 103 @Override 104 @FindBugsSuppressWarnings("RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN") 105 public boolean equals(Object o) { 106 return (o == this) || ((o instanceof Boolean) && (((Boolean) o).value == value)); 107 } 108 109 /** 110 * Compares this object to the specified boolean object to determine their 111 * relative order. 112 * 113 * @param that 114 * the boolean object to compare this object to. 115 * @return 0 if the value of this boolean and the value of {@code that} are 116 * equal; a positive value if the value of this boolean is 117 * {@code true} and the value of {@code that} is {@code false}; a 118 * negative value if the value if this boolean is {@code false} and 119 * the value of {@code that} is {@code true}. 120 * @see java.lang.Comparable 121 * @since 1.5 122 */ 123 public int compareTo(Boolean that) { 124 return compare(value, that.value); 125 } 126 127 /** 128 * Compares two {@code boolean} values. 129 * @return 0 if lhs = rhs, less than 0 if lhs < rhs, and greater than 0 if lhs > rhs. 130 * (Where true > false.) 131 * @since 1.7 132 * @hide 1.7 133 */ 134 public static int compare(boolean lhs, boolean rhs) { 135 return lhs == rhs ? 0 : lhs ? 1 : -1; 136 } 137 138 /** 139 * Returns an integer hash code for this boolean. 140 * 141 * @return this boolean's hash code, which is {@code 1231} for {@code true} 142 * values and {@code 1237} for {@code false} values. 143 */ 144 @Override 145 public int hashCode() { 146 return value ? 1231 : 1237; 147 } 148 149 /** 150 * Returns a string containing a concise, human-readable description of this 151 * boolean. 152 * 153 * @return "true" if the value of this boolean is {@code true}, "false" 154 * otherwise. 155 */ 156 @Override 157 public String toString() { 158 return String.valueOf(value); 159 } 160 161 /** 162 * Returns the {@code boolean} value of the system property identified by 163 * {@code string}. 164 * 165 * @param string 166 * the name of the requested system property. 167 * @return {@code true} if the system property named by {@code string} 168 * exists and it is equal to "true" using case insensitive 169 * comparison, {@code false} otherwise. 170 * @see System#getProperty(String) 171 */ 172 public static boolean getBoolean(String string) { 173 if (string == null || string.length() == 0) { 174 return false; 175 } 176 return (parseBoolean(System.getProperty(string))); 177 } 178 179 /** 180 * Parses the specified string as a {@code boolean}. 181 * 182 * @param s 183 * the string representation of a boolean value. 184 * @return {@code true} if {@code s} is not {@code null} and is equal to 185 * {@code "true"} using case insensitive comparison, {@code false} 186 * otherwise. 187 * @since 1.5 188 */ 189 public static boolean parseBoolean(String s) { 190 return "true".equalsIgnoreCase(s); 191 } 192 193 /** 194 * Converts the specified boolean to its string representation. 195 * 196 * @param value 197 * the boolean to convert. 198 * @return "true" if {@code value} is {@code true}, "false" otherwise. 199 */ 200 public static String toString(boolean value) { 201 return String.valueOf(value); 202 } 203 204 /** 205 * Parses the specified string as a boolean value. 206 * 207 * @param string 208 * the string representation of a boolean value. 209 * @return {@code Boolean.TRUE} if {@code string} is equal to "true" using 210 * case insensitive comparison, {@code Boolean.FALSE} otherwise. 211 * @see #parseBoolean(String) 212 */ 213 public static Boolean valueOf(String string) { 214 return parseBoolean(string) ? Boolean.TRUE : Boolean.FALSE; 215 } 216 217 /** 218 * Returns a {@code Boolean} instance for the specified boolean value. 219 * <p> 220 * If it is not necessary to get a new {@code Boolean} instance, it is 221 * recommended to use this method instead of the constructor, since it 222 * returns its static instances, which results in better performance. 223 * 224 * @param b 225 * the boolean to convert to a {@code Boolean}. 226 * @return {@code Boolean.TRUE} if {@code b} is equal to {@code true}, 227 * {@code Boolean.FALSE} otherwise. 228 */ 229 public static Boolean valueOf(boolean b) { 230 return b ? Boolean.TRUE : Boolean.FALSE; 231 } 232} 233